修改Shell排序

时间:2017-10-12 02:25:29

标签: java algorithm

我知道shell排序的工作,但我遇到了一个有趣的编码问题,其中差距实际上由用户自己输入。

示例:

GAP {5,2,1} 
//input given by user

Shell排序:

int sort(int arr[])
{
    int n = arr.length;

    // Start with a big gap, then reduce the gap
    for (int gap = n/2; gap > 0; gap /= 2)
    {
        // Do a gapped insertion sort for this gap size.
        // The first gap elements a[0..gap-1] are already
        // in gapped order keep adding one more element
        // until the entire array is gap sorted
        for (int i = gap; i < n; i += 1)
        {
            // add a[i] to the elements that have been gap
            // sorted save a[i] in temp and make a hole at
            // position i
            int temp = arr[i];

            // shift earlier gap-sorted elements up until
            // the correct location for a[i] is found
            int j;
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
                arr[j] = arr[j - gap];

            // put temp (the original a[i]) in its correct
            // location
            arr[j] = temp;
        }
    }
    return 0;
}

0 个答案:

没有答案