归并排序C语言实现

来源:互联网 发布:js对象数组重新赋值 编辑:程序博客网 时间:2024/06/05 18:51

归并排序典型的分治策略的体现,时间复杂度是O(nlgn), 空间复杂度是O(n).属于稳定排序。

下面是C语言实现代码。


#define MAX 10000000//p, q, r是均是元素的下标void merge(int A[], int p, int q, int r){    int n1 = q - p + 1;    int n2 = r - q;    int * L = (int *)malloc(sizeof(int) * n1 + 1);    int * R = (int *)malloc(sizeof(int) * n2 + 1);    int i, j, k;    for (i = 0; i < n1; i++) {        L[i] = A[p + i];    }    for (j = 0; j < n2; j++) {        R[j] = A[q + j + 1];    }    L[i] = MAX;    R[j] = MAX;    i = 0;    j = 0;    for (k = p; k <= r; k++) {        if (L[i] <= R[j]) {            A[k] = L[i];            i++;        } else {            A[k] = R[j];            j++;        }    }}void merge_sort(int A[], int p, int r){    if (p < r) {        int q = (p + r) / 2;        merge_sort(A, p, q);        merge_sort(A, q + 1, r);        merge(A, p, q, r);    }}



0 0