归并排序

来源:互联网 发布:淘宝怎么禁止客户下单 编辑:程序博客网 时间:2024/06/05 11:00

归并排序的递归实现,思想很简单

void Merge(int *arr,int low,int mid,int high) {    int i=low,j=mid+1,k=0;      int *temp;    temp=(int *)malloc((high-low+1)*sizeof(int));    while(i<=mid && j<=high)    {        if(arr[i]<=arr[j])            temp[k++]=arr[i++];        else            temp[k++]=arr[j++];    }    while(i<=mid)        temp[k++]=arr[i++];    while(j<=high)        temp[k++]=arr[j++];    for(i=low,k=0;i<=high;i++,k++)        arr[i]=temp[k];    free(temp);void MergeSort(int *arr,int low,int high){                               //用递归应用二路归并函数实现排序——分治法    if(low<high)    {        int mid=(low+high)/2;        MergeSort(arr,low,mid);        MergeSort(arr,mid+1,high);        Merge(arr,low,mid,high);    }}int main(){    int x[]={0,5,-2,1,-8,7,6,-3};    MergeSort(x,0,7);    for(int i=0;i<8;i++)        cout<<x[i]<<" ";    return 0;}





原创粉丝点击