Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 22
1

Счетчик сравнений для быстрой сортировки

05.03.2013, 18:23. Показов 2844. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Взял сортировку из википедии
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void qSort(int arr7[], int first, int last) {
      k = first;                
      l = last;
      x = arr7[(first+last)/2];  
      do {
          while(arr7[k] > x){ k++; }  
          while(arr7[l] < x){ l--; }  
          if(k <= l){           
              
              tmp = arr7[k];   
              arr7[k] = arr7[l];
              arr7[l] = tmp;
              pr5=pr5+1;  //перестановки+1 после перевертыша
              if(k==l || arr7[k]==arr7[l]){ pr5=pr5-1;} // минус один если перевернутые объекты совпадали
              k++; l--;           
          }
      } while(k < l);
      if(first < l) qSort(arr7, first, l);
      if(k < last) qSort(arr7, k, last);
  }
Изменил для убывания и подставил счетчик перестановок. По идее он должен работать верно. Интересует счетчик сравнений - не знаю куда поставить, помогите пожалуйста.
ПС считать на бумажке алгоритм с рекурсией для подсчета сравнений вручную очень муторно, поэтому прошу помочь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2013, 18:23
Ответы с готовыми решениями:

Алгоритм быстрой сортировки - посчитать количество перестановок и сравнений элементов массивов
Помогите пожалуйста в алгоритме быстрой сортировки посчитать количество перестановок и сравнений...

Для заданного массива сгенерировать перестановку так, чтобы число сравнений при быстрой сортировке было максимальным
Требуется написать программу, которая для заданного массива чисел от 1 до n (1,2,3,...,n)...

Куда в программе добавить счетчик для поиска количества перестановок и сравнений?
void InsertSort(int *mas, int N) //сортировка вставками { int i,key=0,temp=0; int...

Два счетчика для обмена и сравнений для сортировки массива
написал два счетчика для обмена и сравнений для сортировки массива.Проблема при выводе выводится...

2
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.03.2013, 18:52 2
Я бы не стал добавлять счетчик прямо в функцию. Вместо этого я вижу 2 варианта:
1) Передавать в функцию сортировки предикат, который будет сравнивать два элемента, и затем просто посчитать число вызовов этого предиката.
2) Заменить int на шаблон и создать свой класс инта с перегруженными операторами. Это слегка муторно, но при этом код собственно сортировки вообще не изменится. Причем для других сортировок нужно будет также всего лишь поменять параметры функции на шаблоны. В принципе, для такого класса хватит лишь перегрузки операторов сравнения и неявного приведения к инту.
1
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 22
05.03.2013, 19:03  [ТС] 3
Для других сортировок счетчики сделал, ради одной быстрой создавать классы итд не буду. Попробую первый вариант. спасибо.
0
05.03.2013, 19:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2013, 19:03
Помогаю со студенческими работами здесь

Количество произведенных сравнений в Быстрой Сортировке
Помогите подсчитать выполненное количество сравнений при алгоритме быстрой сортировки. Не могу...

График зависимость количества перестановок и сравнений от размерности массива для алгоритмов сортировки
имеются массивы с размерностью от 1 до 20 с данными не отсортированными,частично...

Пример быстрой сортировки массива строк и сортировки методом выбора
Добрый вечер. Скиньте пожалуйста пример быстрой сортировки массива строк и сортировки массива строк...

Почему число сравнений в быстрой сортировке ( Хоара) различно?
Сортирую один и тот же массив, но в различной степени упорядоченности, почему число сравнений...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru