希尔排序
- 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。
![](https://img-blog.csdnimg.cn/img_convert/385a1371f2859fbd2943203730eb3ba1.gif)
- 排序思路:
- 1.希尔排序可以理解为插入排序的升级版, 先将待排序数组按照指定步长划分为几个小数组
- 2.利用插入排序对小数组进行排序, 然后将几个排序的小数组重新合并为原始数组
- 3.重复上述操作, 直到步长为1时,再利用插入排序排序即可
int main()
{
int nums[5] = {3, 1, 2, 0, 3};
int len = sizeof(nums) / sizeof(nums[0]);
int gap = len / 2;
do{
for (int i = gap; i < len; i++)
{
int j = i;
while((j - gap) >= 0)
{
printf("%i > %i\n", nums[j - gap], nums[j]);
if(nums[j - gap] > nums[j]){
int temp = nums[j];
nums[j] = nums[j - gap];
nums[j - gap] = temp;
}else{
break;
}
j--;
}
}
gap = gap / 2;
}while(gap >= 1);
}