标签:
1.算法介绍
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
2.算法原理
3.源代码
1 void Merge(int sourceArr[],int tempArr[],int startIndex,int midIndex,int endIndex) 2 { 3 int i = startIndex,j=midIndex+1,k = startIndex; 4 while(i!=midIndex+1 && j!=endIndex+1) 5 { 6 if(sourceArr[i]>sourceArr[j]) 7 tempArr[k++] = sourceArr[i++]; 8 else 9 tempArr[k++] = sourceArr[j++]; 10 } 11 while(i!=midIndex+1) 12 tempArr[k++] = sourceArr[i++]; 13 while(j!=endIndex+1) 14 tempArr[k++] = sourceArr[j++]; 15 for(i=startIndex;i<=endIndex;i++) 16 sourceArr[i] = tempArr[i]; 17 } 18 19 //内部使用递归 20 void MergeSort(int sourceArr[],int tempArr[],int startIndex,int endIndex) 21 { 22 int midIndex; 23 if(startIndex<endIndex) 24 { 25 midIndex=(startIndex+endIndex)/2; 26 MergeSort(sourceArr,tempArr,startIndex,midIndex); 27 MergeSort(sourceArr,tempArr,midIndex+1,endIndex); 28 Merge(sourceArr,tempArr,startIndex,midIndex,endIndex); 29 } 30 } 31 32 int main(int argc,char * argv[]) 33 { 34 int a[8]={50,10,20,30,70,40,80,60}; 35 int i,b[8]; 36 MergeSort(a,b,0,7); 37 for(i=0;i<8;i++) 38 printf("%d ",a[i]); 39 printf("\n"); 40 return 0; 41 }
4.算法时间复杂度
O(nlgn)
5.稳定性分析
稳定排序
标签:
原文地址:http://www.cnblogs.com/pngcui/p/4641416.html