排序算法4:希爾排序(shell sort)

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

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章