归并排序的一个练习

今天知道了Dennis Ritchie的去世,有点小消沉。大师一路走好.....

--------------------------------------------------------------------------------------
归并排序简单来说就是将一个集合分为若干小集合,每一小集合内部进行排序,然后将这些有序的集合进行排序都到最终的结果。归并排序的时间复杂度为nlogn。

一个归并排序的小例子:

 1 #include<stdio.h>
2 void merge(int array[],int result[],int low,int mid,int high){
3 int i,j,k;
4 printf("low = %d,mid = %d,high = %d\n",low,mid,high);
5 for(i=low,j=mid+1,k=0;i<=mid&&j<=high;){
6 //按大小赋值,注意++
7 if(array[i]<array[j]){
8 result[k++]=array[i++];
9 }else{
10 result[k++]=array[j++];
11 }
12 }
13 //将剩余元素依次赋值
14 while(i<=mid){
15 result[k++]=array[i++];
16 }
17 while(j<=high){
18 result[k++]=array[j++];
19 }
20 //将值赋到原来的数组中
21 for(k=0;k<=high-low;k++){
22 array[k+low]=result[k];
23 }
24 return;
25 }
26 void merge_sort(int array[],int result[],int low,int high){
27 if(low>=high) return;
28 int mid=(low+high)/2;
29 merge_sort(array,result,low,mid);
30 merge_sort(array,result,mid+1,high);
31 merge(array,result,low,mid,high);
32 }
33 int main(void){
34 int a[10]={10,9,8,7,100,22,34,1,6,0};
35 int b[10]; //辅助数组
36 int i;
37 merge_sort(a,b,0,9);
38 for(i=0;i<10;i++){
39 printf("%d ",a[i]);
40 }
41 printf("\n");
42 return 0;
43 }

posted @ 2011-10-13 20:02  akawhy  阅读(347)  评论(0编辑  收藏  举报