1. 程式人生 > >希爾排序C語言版

希爾排序C語言版

希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本.

 希爾排序的基本思想就是:將需要排序的序列劃分為若干個較小的序列,對這些序列進行直接插入排序,通過這樣的操作可使需要排序的數列基本有序,最後再使用一次直接插入排序。

      在希爾排序中首先要解決的是怎樣劃分序列,對於子序列的構成不是簡單地分段,而是採取將相隔某個增量的資料組成一個序列。一般選擇增量的規則是:取上一個增量的一半作為此次子序列劃分的增量,一般初始值元素的總數量。

/*
*希爾排序
陣列,長度
*/
void shell_sort(int *arr,int length)
{
    int temp;
    int j;
    for(int d = (length/3) + 1;d >= 1;d =d/2)
    {
        for(int i = d;i < length; ++i)
        {
            temp=arr[i];
            for(j = i-d; j >= 0 && temp < arr[j]; j = j-d)
            {
                arr[j+d]= arr[j];
            }
            arr[j+d] = temp;
        }

    }

}