希尔排序
希尔排序是是插入排序的一种更高效的改进版本
希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。
//平均时间复杂度O(n^1.3)
//空间复杂度O(1)
//最优时间复杂度O(n)
//最坏时间复杂度O(n^2)
//不稳定
#include <stdio.h>
void shellSort(int a[], int len){
int gap, i, j;
int temp;
for (gap = len / 2; gap > 0; gap /= 2) {
for (i = gap; i < len; i++) {
temp = a[i];
for (j = i - gap; j >= 0 && a[j] > temp; j -= gap) {
a[j+gap] = a[j];
}
a[j+gap] = temp;
}
}
}
int main()
{
int a[8];
printf("Please input the number:\n");
for(int i=0;i<8;i++)
scanf("%d",&a[i]);
shellSort(a, 8);
for (int i=0; i<8; i++) {
printf("%d\n",a[i]);
}
return 0;
}