用c实现分治算法

#include<stdio.h>  
#include<stdlib.h>  
#define MAX 10000
void merge(int num[], int p, int q, int r);  
void merge_sort(int num[], int p, int r);
int num[1000];
int main(void) {
    int i;  
    int n;
    scanf("%d",&n);
    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; 
    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;  
    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);  
    }  
}  

 

posted @ 2016-07-07 14:43  风吹云散  阅读(233)  评论(0)    收藏  举报