Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Шейкерная сортировка






44 06 06 06 06 06 06 06

55 44 12 12 12 12 12 12

12 55 44 18 18 18 18 18

42 12 55 44 42 42 42 42

94 42 18 55 44 44 44 44

18 94 42 42 55 55 55 55

06 18 94 67 67 67 67 67

67 67 67 94 94 94 94 94

12 18 42 44 55 67 94 06

94 06 12 18 42 44 55 67

Сортировка Шелла

44 55 12 42 94 18 06 67

44 18 06 42 94 55 12 67

06 18 12 42 44 55 94 67

06 12 18 42 44 55 67 94

Задан массив a[0].. a[15]

 

 

1. Вначале сортируем простыми вставками каждые 8 групп из 2-х элементов (a[0], a[8[), (a[1], a[9]),..., (a[7], a[15])

 

Потом сортируем каждую из четырех групп по 4 элемента

(a[0], a[4], a[8], a[12]),..., (a[3], a[7], a[11], a[15])

 

В нулевой группе будут элементы 4, 12, 13, 18, в первой - 3, 5, 8, 9 и т.п.

3. Далее сортируем 2 группы по 8 элементов, начиная с (a[0], a[2], a[4], a[6], a[8], a[10], a[12], a[14])

 

В конце сортируем вставками все 16 элементов

 

int increment(long* inc, long size) { int p1, p2, p3, s; p1 = p2 = p3 = 1; s = -1; do { if (++s % 2) { inc[s] = 8*p1 - 6*p2 + 1; } else { inc[s] = 9*p1 - 9*p3 + 1; p2 *= 2; p3 *= 2; } p1 *= 2; } while(3*inc[s] < size); return s > 0? --s: 0; } void shellSort(long* a, long size) {long inc, i, j, seq[40]; int s; // вычисление последовательности приращенийs = increment(seq, size); while (s > = 0) { // сортировка вставками с инкрементами inc[] inc = seq[s--]; for (i = inc; i < size; i++) { long temp = a[i]; for (j = i-inc; (j > = 0) & & (a[j] > temp); j -= inc) a[j+inc] = a[j]; a[j+inc] = temp; } }}

Сравнение рассмотренных сортировок


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал