One Algorithm A Day --- MERGESORT--分治法

来源:互联网 发布:linux里sleep函数 编辑:程序博客网 时间:2024/05/21 10:34

分治法--归并排序

#include <stdlib.h>#include <stdio.h>#define Len 20typedef int RecType;void Merge(RecType A[],int p,int q,int r){    RecType *R1;    int i = p,j = q + 1,k = 0;    R1 = (RecType*)malloc((r-p+1)*sizeof(RecType));    while(i <= q && j <= r)    {        if(A[i] < A[j])        {            R1[k] = A[i];            k++;            i++;        }else{            R1[k] = A[j];            k++;            j++;        }    }    while(i <= q)    {        R1[k] = A[i];        k++;        i++;    }    while(j <= r)    {        R1[k] = A[j];        j++;        k++;    }    for(k = 0,i = p;i <= r;i++,k++)    {        A[i] = R1[k];    }}void MergeSort(RecType A[],int p,int r){    int q;    if(p < r)    {        q = (p+r)/2;        MergeSort(A,p,q);        MergeSort(A,q+1,r);        Merge(A,p,q,r);    }}void print(RecType A[]){    int i;    for(i = 0;i < Len;i++)    {        printf("%d ",A[i]);    }    printf("\n");}int main(){    RecType A[Len] = {2,4,6,1,8,34,23,78,13,6,9,22,11,33,14,26,5,3,56,12};    MergeSort(A,0,19);    print(A);    return 0;}