1. 程式人生 > >排序 —— 希爾排序(Shell sort)

排序 —— 希爾排序(Shell sort)

希爾排序(Shell sort)的名稱源於它的發明者 Donald Shell,該演算法是衝破二次時間屏障(冒泡和插入排序,基於相鄰元素的交換)的第一批演算法。希爾排序改進了冒泡和插入排序的相鄰元素才進行交換,而是比較相距一段距離的元素來工作,各趟比較所用的距離隨著演算法的進行而減少,直到只比較相鄰元素的最後一趟排序為止。正是因為這樣的工作機制,希爾排序有時也稱為縮小增量排序(diminishing increment sort)

typedef int ElementType;

void ShellSort (ElementType A[], int N) {

    int Increment, i, j;
    ElementType Tmp;

    for
(Increment = N/2; Increment >= 0; Increment /= 2) { for (i = Increment; i < N; ++i) { Tmp = A[i]; for (j = i; j >= Increment; j -= Increment) { if (Tmp < A[j-Increment]) A[j] = A[j-Increment]; else break; // 尤其注意這裡的 break;
} A[j] = Tmp; } } }