版权声明:[email protected] https://blog.csdn.net/qq_271334644/article/details/88342420
希尔排序
利用越有序,插排效率越大的特性,
再进行插排之前进行预排序,让数列尽可能的有序
对数列进行依次分组插排
时间复杂度
最好(O(n)) | 平均(O(n^1.3) | 最差O(n^2)
空间复杂度 O(1)
稳定性:不稳定 (相同的数,没法保证分在一个分组)
程序实现
扫描二维码关注公众号,回复:
6180944 查看本文章
#include<stdio.h>
void InsertSortWithGap(int array[], int size, int gap) {
// for (int i = gap; i < size; i++) {
for (int i = 0; i < size; i++) {
int key = array[i];
int j;
for (j = i - gap; j >= 0 && array[j] > key; j -= gap) {
array[j + gap] = array[j];
}
array[j + gap] = key;
}
}
void ShellSort(int array[], int size) {
int gap = size;
while (1) {
gap = (gap / 3) + 1;
InsertSortWithGap(array, size, gap);
if (gap == 1) {
break;
}
}
}
int main() {
int array[] = { 3, 9, 1, 4, 7, 8, 3, 5 };
int size = sizeof(array) / sizeof(int);
ShellSort(array, size);
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
}