数据结构与算法分析之希尔排序算法

希尔排序,也叫作缩小增量排序。其时间运行时间依赖于增量序列。
最有时间复杂度O(n ^ (1.3) ),最差的时间复杂度O(n ^ 2)。
核心代码:

void shellSort(int A[],int N) {
    int i, j, Increment;
    int 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;
            }
            A[j] = tmp;
            for (int k = 0; k < N; k++) {
                printf("%d ", A[k]);
            }
            printf("\n");
        //  printf("A[j]--%d\n", A[j]);
        }
        printf("\n");
    }
}
int main()
{

    int a[6] = { 3,1,5,0,2 ,4};
    shellSort(a, 6);
    for (int i = 0; i < 5; i++) {
        printf("%d ", a[i]);
    }
    system("pause");
    return 0;
}

运行结果

0 1 5 3 2 4
0 1 5 3 2 4
0 1 4 3 2 5

0 1 4 3 2 5
0 1 4 3 2 5
0 1 3 4 2 5
0 1 2 3 4 5
0 1 2 3 4 5

0 1 2 3 4 5

猜你喜欢

转载自blog.csdn.net/hellocode1900/article/details/81143508