希尔排序是插入排序的优化版本,实现原理:将未知数组分为以gap为间隔的n个序列(gap的初值通常取需要排序数列的长度,每次排序之后取(gap/3+1)),然后将这n个序列中的数进行比较,例如先对比序列1和序列2中的第一个数字,若序列2中的第一个小于学列1中的第一个则更换两个数的位置,然后比较序列2和序列3中的第一个数字,以此类推,直到gap的数值为1时,排序结束。实现代码:
/*
* 希尔排序(shell sort)
* 1.希尔排序为插入排序的优化版,具体原理:将数组分为以gap为间隔的数个序列,
* 再分别对这数个序列的每个数字进行比较,(gap一般取(gap/3+1),第一次
* gap = length/3+1)
*/
void shell_sort(int *nums,int len)
{
if((nums == NULL)||(len <= 1))
{
return ;
}
int gap = len;
while(gap > 1)
{
gap = (gap/3 + 1);
for(int i = 0;i < gap;i++)
{
for(int j = i;j < len - gap;j+=gap)
{
if(nums[j] > nums[j+gap])
{
int tmp = nums[j];
nums[j] = nums[j+gap];
nums[j+gap] = tmp;
}
}
}
}
}