c语言数据结构-------------插入排序

#include 


//直接插入排序
void InsertSort(int A[], int n) {
    int j, i;
    for (i = 1; i < n; ++i) {
        j = i;
        while (j > -1) {
            int t = A[j];
            j--;
            if (j != -1 && t < A[j]) {
                A[j + 1] = A[j];
                A[j] = t;
            } else break;
        }
    }


}

//折半插入排序
void InsertBinorySort(int A[], int n) {
    int i, j, low, high, mid;
    //折半查找插入位置
    for (i = 1; i < n; i++) {
        low = 0;
        high = i - 1;
        while (high >= low) {
            mid = (low + high) / 2;
            //保证算法稳定性,当mid==A[i],low=mid+1
            if (A[i] >= A[mid]) {
                low = mid + 1;
            } else
                high = mid - 1;
        }

        int t = A[i];
        //移动元素
        for (j = i - 1; j >= low; j--) {
            A[j + 1] = A[j];
        }
        A[low] = t;

    }
}
//希尔排序
void ShellSort(int A[], int n) {
    int d, i, j, k;
    for (d = n / 2; d >= 1; d = d / 2) {

        //因增量分的组数
        for (i = 0; i < d; i++) {

            //对每组进行直接插入排序
            for (j = i; j < n; j += d) {

                k = j;
                while (k > -1) {
                    int t = A[k];
                    k=k-d;
                    if (k > -1 && t < A[k]) {
                        A[k + d] = A[k];
                        A[k] = t;
                    } else break;
                }

            }

        }


    }


}


int main(void) {

    int A[] = {49, 38, 65, 97, 76, 13, 27, 49};

    InsertSort(A, 8);

    printf("直接插入排序:");
    for (int i = 0; i < sizeof(A) / sizeof(A[0]); ++i) {
        printf("%d  ", A[i]);
    }

    printf("\n");
    int B[] = {49, 38, 65, 97, 76, 13, 27, 49};
    InsertBinorySort(B, 8);
    printf("折半插入排序:");
    for (int i = 0; i < sizeof(B) / sizeof(B[0]); ++i) {
        printf("%d  ", B[i]);
    }


    printf("\n");
    int C[] = {49, 38, 65, 97, 76, 13, 27, 49};
    ShellSort(C,8);
    printf("       希尔排序:");
    for (int i = 0; i < sizeof(C) / sizeof(C[0]); ++i){
        printf("%d  ", C[i]);

    }
}

你可能感兴趣的:(数据结构,c语言,算法)