归并排序(Merge Sort)
2014-07-02 12:09
211 查看
#include<stdio.h> #include<malloc.h> 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)); //分配内存空间给未知大小的数组 int *R=(int *)malloc(sizeof(int)*(n2)); for(int i=0;i<n1;i++) //i必须从0开始技术,而不是从p开始 L[i]=a[p+i];//此处(p+i)而非i,因为p可能不为0 for(i=0;i<n2;i++) R[i]=a[q+1+i]; i=0; int j=0; int k=p; while(i<n1&&j<n2&&k<=r) { if(L[i]<=R[j]) a[k++]=L[i++]; else a[k++]=R[j++]; } while(k<=r) { if(i<n1&&j>=n2) a[k++]=L[i++]; if(i>=n1&&j<n2) a[k++]=R[j++]; } } void MergeSort(int a[],int p,int r) { if(p<r) //如果没有这个限制,r一直会变小,进入死循环 { int q=(p+r)/2; MergeSort(a,p,q); MergeSort(a,q+1,r); Merge(a,p,q,r); } } void main() { int a[10]={2,5,8,7,6,9,0,3,1,4}; MergeSort(a,0,9); for(int i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); }
相关文章推荐
- 归并排序(merge_sort)(及自底向上的归并排序)
- 使用C#详解常用排序算法(三):归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序(merge sort)算法实现
- 无聊写排序之 ---- 归并排序(MergeSort) 递归实现
- 归并排序(Mergesort)之Java实现
- 归并排序(Merge_Sort)
- 归并排序(merge sort)算法实现
- 排序算法详解【归并排序-Merge_Sort】
- 排序算法详解【归并排序-Merge_Sort】
- 面试之路(16)-归并排序详解(MergeSort)递归和非递归实现
- 归并排序(merge sort)的一个基于模板的实现
- 归并排序(merge sort)
- 归并排序(Merge Sort)
- 【每日一题(28)】高等排序算法(2) 归并排序(MergeSort)
- 归并排序(Merge Sort)
- 归并排序(merge sort)
- 归并排序(MergeSort)
- 归并排序(merge sort)源码
- 归并排序(merge sort)c++实现