Вставьте сортировку напрямую
1 идея сортировки:
Запись RI, которая будет отсортирована, вставлена в уже отсортированные записи R1, R2, ..., R (N-1).
Для случайной последовательности, начиная с второго элемента, вставьте элемент в соответствующую позицию в элементе перед ним, по очереди. Элементы до того, как они были отсортированы.
Первый заказ: вставьте второй элемент в упорядоченный список в предыдущем порядке (в настоящее время в предыдущем есть только один элемент, конечно, он упорядочен). После этого заказаны первые два элемента этой последовательности.
Вторая сортировка: вставьте третий элемент в упорядоченный список предыдущей длины 2, чтобы первые два элемента были заказаны.
И так далее, пока nth-элемент не вставлен в упорядоченный список предыдущей длины (N-1).
2 Реализация алгоритма:
// непосредственно вставить сортировку void raste_insert_sort (int num [], int len) {int i, j, key; for (j = 1; j <len; j ++) {key = num [j]; i = J-1; while (i> = 0 && num [i]> key) {num [i+1] = num [i]; я--; } num [i+1] = key; }}3 Анализ производительности:
3.1 Сложность пространства: как упоминалось выше, используется клавиша вспомогательной единицы, а сложность пространства - O (1)
3.2 Временная сложность:
3.2.1 Лучший случай: записи, которые нужно отсортировать, уже заказаны, а затем сортируют их за одну поездку, ключевые слова сравниваются один раз, а записи перемещаются дважды. Весь процесс
Количество сравнений
Количество переводов записей
Временная сложность o (n)
3.2.2 В худшем случае: записи, которые нужно отсортировать, уже находятся в обратном порядке, тогда время сравнения ключевых слов I (от I-1 к 0), а запись движется (i+2) раз. Весь процесс
Количество сравнений
Количество переводов записей
Сложность времени o (n^2)
3.2.3 Средняя сложности времени: O (n^2)
3.3 Стабильность: стабильная
Сложите половину вставки сортировки
1 идея сортировки:
Основываясь на прямой сортировке, записи, которые будут отсортированы RI, вставлены в уже отсортированные записи R1, R2, ..., R (N-1). Поскольку записи R1, R2, ..., R (N-1) были отсортированы, «Половина установления» может использоваться при поиске позиции вставки.
2 Реализация алгоритма:
// сгибать половину вставки сортировки void binary_insert_sort (int num [], int len) {int i, j, key, low, High, mid; for (i = 1; i <len; i ++) {key = num [i]; низкий = 0; High = I-1; mid = (низкий+высокий)/2; // Найти точку вставки, конечная точка вставки низкая, а (low <= High) {if (key <num [mid]) High = mid-1; еще низкий = средний+1; mid = (низкий+высокий)/2; } // переместить запись для (j = i; j> low; j-) {num [j] = num [j-1]; } // вставить запись num [low] = key; }}3 Анализ производительности:
3.1 Сложность пространства: как упоминалось выше, используется клавиша вспомогательной единицы, а сложность пространства - O (1)
3.2 Сложность времени: хотя полуфинанский поиск уменьшает количество записей и сравнений, он не уменьшает количество движений, поэтому сложность времени такая же, как и алгоритм прямого поиска.
3.2.1 Лучший случай: сложности времени o (n)
3.2.2 В худшем случае: сложности времени o (n^2)
3.2.3 Средняя сложности времени: O (n^2)
3.3 Стабильность: стабильная