Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818

Добавить счетчики сравнений и присваиваний в сортировках

13.12.2011, 10:43. Показов 1394. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
весь семестр балду пинала,а завтра сдавать задачи.у меня есть нароботки, но задачи сделаны не до конца.

1 задача.Отсортировать массив тремя видами сортировки.выбором вставками и обменом.вывести количество сравнений и присваиваний.
мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main ()
{
    setlocale(LC_ALL,"Russian");
    const int n=10;
    int x[n],i,j,q=0,z=0,k,t,m,h,temp;
    cout << "Задайте массив из " << n << " элементов для сортировки обменом" << endl;
    srand (time(NULL));
    for (i=0;i<n;i++)
        cin >> x[i];
    cout << endl;
        for (i=0;i<n;i++)
            for (j=n-1;j>i;j--,q++)
            {
        if (x[j-1]>x[j])
        {
            m=x[j-1];
            x[j-1]=x[j];
            x[j]=m;
            z++;
        }
            }
        for (i=0;i<n;i++)
        cout << x[i] << " ";
    cout << endl;
    cout << "количество сравнений = " << q << "\n";
    z=z*3;
    cout << "количество присваиваний = " << z << "\n";
    cout << endl;
    cout << "Введите тот же массив для сортировки методом выбора";
    cout << endl;
    for (i=0;i<n;i++)
        cin >> x[i];
    cout << endl;
    q=0;z=0;
    for (i=0;i<n;i++){
        int min=i;
        for(j=i+1;j<=n;j++){
                q++;
            if(x[j]<x[min]){
        min=j;
            }
        }
        if(min!=i)
        swap(x[i],x[min]);
            z++;
    
    }
    for (i=0;i<n;i++)
    cout << x[i] << " ";
    cout << endl;
    cout << "количество сравнений = " << q << "\n";
    z=z*3;
    cout << "количество присваиваний = " << z << "\n";
    cout << endl;
    int w;
    for(i=0;i<n;i++)
        cin >> x[i];
    q=0,z=0;
    for (i=1;i<n;i++)
    {
        w=x[i];
        for (j=i-1;j>=0 && (x[j] > w);j--)
        {
            q++;
            x[j+1]=x[j];
            x[j]=w;
    }
    if(i>0)
    
        z++;
    }
    
                for (i=0;i<n;i++)
    cout << x[i] << " ";
                cout << endl;
                cout << "Количество сравнений = " << q << endl;
                z=z*3;
                cout << "Количество присваиваний = " << z << endl;
    system("pause >> void");
    return 0;
    }
здесь сортировка обменом работает хорошо,а вот выбором вообще не сортирует массив и выводит неверные результаты.про вставки незнаю, может правильно может нет.

Задача 2.отсортировать массив тремя видами сортировки.Обменом,улучшеным обменом и шейкер-сортировкой.вывести количество сравнений и присваиваний.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void BubbleSort(int *x, const int n)
{
    int i,j,m;
    for (i=0;i<n;i++) 
       for (j=n-1;j>i;j--) 
       { 
     if (x[j-1]>x[j]) 
     { 
       m=x[j-1]; 
       x[j-1]=x[j]; 
       x[j]=m;  
     } 
       }
}
void SheikerSort(int *a, const int n) 
 { 
            int l, r, i, k, buf; 
            k = l = 0; 
            r = n - 2; 
            while(l <= r) 
            { 
               for(i = l; i <= r; i++) 
                  if (a[i] > a[i+1]) 
                  { 
                     buf = a[i]; a[i] = a[i+1]; a[i+1] = buf; 
                     k = i; 
                  } 
               r = k - 1; 
               for(i = r; i >= l; i--) 
                  if (a[i] > a[i+1]) 
                  { 
                     buf = a[i]; 
         a[i] = a[i+1]; 
         a[i+1] = buf; 
                     k = i; 
                  } 
               l = k + 1; 
            } 
         }
void Bestsort(int arr[], int L, int R) 
 { 
  if (L >= R) 
  return; 
  int m = (L + R) /2; 
  int mediana = arr[m]; 
  int LL = L; 
  int RR = R; 
  while (LL < RR) { 
  while (arr[LL] < mediana) 
  LL++; 
  while (arr[RR] > mediana) 
  RR--; 
  if (LL <= RR) { 
  int swap = arr[LL]; 
  arr[LL] = arr[RR]; 
  arr[RR] = swap; 
  LL++; 
  RR--; 
  } 
  } 
  if (LL<R) 
  Bestsort (arr , LL , R); 
  if (RR > L) 
  Bestsort (arr , L , RR); 
 }
void main(void) 
{ 
  int i;
  setlocale(LC_ALL,"Russian");
  int arr[] =  { 5, 19, 4, 7, 15, 12, 1, 6, 10, 8 }; 
  int ARR_LENGTH =  sizeof (arr) / sizeof (int); 
  Bestsort (arr , 0 , ARR_LENGTH - 1); 
  cout << "Улучшеная сортировка обменом:" << endl;;
  for (i=0; i < ARR_LENGTH; i++) 
  cout << arr[i] << " "; 
         cout << endl;
         cout << endl;
        int a[10] = {5, 19, 4, 7, 15, 12, 1, 6, 10, 8}; 
    SheikerSort(a, 10); 
    cout << "Шейкерная сортировка:" << endl;
    for(i = 0; i < 10; i++) 
        cout << a[i] << " ";
    cout << endl;
    cout << endl;
    const int n=10;
    int x[10] = {5, 19, 4 , 7 ,15 , 12 , 1 , 6 , 10 , 8};
    BubbleSort(x,10);
    cout << "Сортировка обменом: " << endl;
    for(i = 0; i < 10; i++) 
        cout << x[i] << " ";
    getchar();
   system("pause >> void");
 }
здесь работают сортировки,нужно всего-лишь добавить счетчики сравнений и присваиваний(что я не могу сделать).

Добавлено через 3 часа 48 минут
помогите пожалуйстааа((
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2011, 10:43
Ответы с готовыми решениями:

Нужно посчитать количество сравнений и присваиваний в сортировках
Задание отсортировать массив чисел по возрастанию и убыванию сортировками (вставками ,слиянием, быстрой и пирамидальной) .Так как при...

Скорость сравнений и присваиваний
Доброго времени суток. Интересует вопрос: насколько примерно процесс сравнения двух элементов (напр. типа int) проходит быстрее, чем...

Количество сравнений в сортировках
Подскажите как вывести количество сравнений в сортировке вставками, никак не могу разобраться int main() { setlocale(LC_ALL,...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2011, 10:43
Помогаю со студенческими работами здесь

Неправильный подсчет сравнений/перестановок в сортировках
Доброго времени суток! Пробую подсчитать количество сравнений и перестановок в алгоритмах сортировок выбора и обмена. Проблема в том, что...

Правильно подсчитать количество перестановок и сравнений в сортировках
Здравствуйте, помогите, пожалуйста, правильно расставить Changes (Перестановки) и Compares (сравнения). Код программы на С++ Нужно,...

Подсчитать количество присваиваний и количество сравнений при сортировке
Составить программу, которая для массива, заполненного случайными целыми числами, проводит сортировку по неубыванию методом вставки...

Счетчики количества перестановок и сравнений Шейкерной сортировки
Помогите ввести счетчики перестановок и сравнений Закоментированный код по идее верен но c ним функция не запускается void...

Поставить счетчики на проверку количества сравнений и обменов сделанных сортировкой
необходимо поставить гдето счетчики на проверку количества сравнений и обменов сделанных сортировкой не получается . for (j = i; j...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru