希爾排序是插入排序的優化版本,實現原理:將未知數組分爲以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;
}
}
}
}
}