排序 —— 希尔排序(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;
        }
    }
}
原文地址:https://www.cnblogs.com/mtcnn/p/9423492.html