Изменения

Перейти к: навигация, поиск

Участник:Satosik

993 байта добавлено, 20:08, 13 июня 2014
Модификации
[http://en.wikipedia.org/wiki/Comb_sort Сортировка расческой] - модификация пузырьковой сортировки, основанной на сравнении элементов на расстоянии. По мере упорядочивания массива это расстояние уменьшается и как только оно достигает 1, массив "досортировывается" обычным пузырьком. Сложность - <tex> O(nlog(n)) </tex>.
'''Шаг 1''' мы вычисляем k которое равно
[http://en.wikipedia.org/wiki/Cocktail_sort Сортировка перемешиванием] - разновидность пузырьковой сортировки, сортирующая массив в 2 направлениях на каждой итерации. В среднем, сортировка перемешиванием работает в 2 раза быстрее пузырька. Сложность - <tex> O(N^2) </tex>.
В оптимизированной версии точное количество сравнений зависит от исходного массива. Но точно известно, что их количество не меньше, чем количество обменов, и не больше, чем <tex> (n - 1)^2 </tex> {{---}} максимальное количество сравнений для данной сортировки. Следовательно, <tex> T_1 = O(n^2) </tex>.
odd-even_sort(a): '''for''' (i = 0; i < n; ++i) '''if''' (i mod 2 =0) '''for''' (int j = 2; j < n; j+=2) '''if''' (a[j] < a[j-1]) swap(a[j-1], a[j]); '''else''' '''for''' (j = 1; j < n; j+=2) '''if''' (a[j] < a[j-1]) swap(a[j-1], a[j]);
for combsort(int i a): jump = 0; i < n bool swapped = true; ++i while (jump > 1 '''and''' swapped) if (i mod2 jump > 1) jump /=0)1.24733; swapped = false; for (int j i = 20; j i + jump < nsize; j+=2+i) if (a[ji + jump] < aarray[j-1i]) swap(aarray[j-1i], aarray[ji + jump]); swapped = true; else '''function''' shakerSort: for (int j begin = -1; j < end = n; j- 2 '''while''' swapped swapped = ''false'' begin++ '''for''' i=2)begin to end '''if ''' A[i] > A[i+1] swap(aA[ji] < a,A[ji+1]) swapped = ''true'' '''if''' swapped = false '''break''' swapped = ''false'' end = end -1 '''for''' i = end '''downto''' begin '''if''' A[i]>A[i+1]) swap(aA[j-1i], aA[ji+1]); swapped = ''true''
131
правка

Навигация