Студопедия

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

Разделы сайта

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






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






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; } }}

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.