用C语言实现分治法排序

来源:互联网 发布:js 判断字符串长度 编辑:程序博客网 时间:2024/05/22 12:04

参考《算法导论》, 用C语言实现了分治法的排序。。。

/********************************************************* * MERGE_SORT.C                                          * * To sort n numbers by merge sort method                * * by Eric Brown                                         * *********************************************************/ #include<stdio.h>#include<stdlib.h>#define N 10#define MAX 10000void merge(int num[], int p, int q, int r);void merge_sort(int num[], int p, int r);int main(void) {    int num[N], p, q, i;    printf("Please input %d numbers to sort(less than %d):\n", N, MAX);        for(i = 0; i < N; i++)        scanf("%d", &num[i]);        merge_sort(num, 0, N-1);        for(i = 0; i < N; i++)        printf("%d ", num[i]);    printf("\n");        system("pause");    return 0;}void merge(int num[], int p, int q, int r) {    int n1, n2, L[q - p + 2], R[r - q + 1], i, j, k;    /* L means left and R means right*/    n1 = q - p + 1;    n2 = r - q;    for(i = 0; i < n1; i++)        L[i] = num[p + i];    for(i = 0; i < n2; i++)        R[i] = num[q + i + 1];    L[n1] = MAX;    R[n2] = MAX;    i = 0;    j = 0;    for(k = p; k <= r; k++){        if(L[i] <= R[j]){            num[k] = L[i];            i++;        } else {            num[k] = R[j];            j++;        }    }}void merge_sort(int num[], int p, int r) {    int q;    if(p < r) {        q = (p + r) / 2;        merge_sort(num, p, q);        merge_sort(num, q+1, r);        merge(num, p, q, r);    }}


 

原创粉丝点击