您的位置:首页 > 运维架构 > Shell

ShellSort(希尔排序)

2017-06-13 22:15 471 查看

希尔排序

希尔排序是是插入排序的一种更高效的改进版本

希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。

//平均时间复杂度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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  希尔排序 算法 性能