希尔排序
时间复杂度:最坏O(n^1.3) 平均O(n^1.3) 最好O(n)
空间复杂度:O(1)
稳定性:不稳定 —> 分组时相同值的元素不一定可以分到同一组,预排序是可能导致相对位置发生变化
数据敏感:敏感
#include<stdio.h>
//升序
void shellSort(int* arr, int size) {
int gap = size;
while (gap > 1) {
//设置步长
gap = gap / 2;
//通过步长进行分组,每组进行一轮插入排序
for (int i = 0; i < size - gap; i++) {
int end = i;
int key = arr[end + gap];
while (end >= 0 && key < arr[end]) {
arr[end + gap] = arr[end];
end = end - gap;
}
arr[end + gap] = key;
}
}
}
int main() {
int arr[10] = { 1,9,5,3,6,4,4,7,10,2 };
shellSort(arr, 10);
for(int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
return 0;
}