归并排序

一 归并排序

  归并排序采用分治策略,对无序数组进行递归二分,二分并排序完后再合并。需要额外的内存空间。

 1 void merge(int *srcArr, int *tmpArr, int startIdx, int midIdx, int endIdx)
 2 {
 3     int i = startIdx;
 4     int j = midIdx+1;
 5     int k = startIdx;
 6 
 7     while (i<=midIdx && j<=endIdx)
 8     {
 9         if (srcArr[i] < srcArr[j])
10             tmpArr[k++] = srcArr[i++];
11         else
12             tmpArr[k++] = srcArr[j++];
13     }
14     while (i<=midIdx)
15             tmpArr[k++] = srcArr[i++];
16     while (j<=endIdx)
17             tmpArr[k++] = srcArr[j++];
18     for (int i=startIdx;i<=endIdx;i++)
19         srcArr[i] = tmpArr[i];
20 }
21 
22 void mergeSort(int *srcArr, int *tmpArr, int startIdx, int endIdx)
23 {
24     if (startIdx < endIdx)
25     {
26         int midIdx = (startIdx+endIdx)/2;
27         mergeSort(srcArr, tmpArr, startIdx, midIdx);
28         mergeSort(srcArr, tmpArr, midIdx+1, endIdx);
29         merge(srcArr,tmpArr,startIdx,midIdx,endIdx);
30     }
31 }

 

posted @ 2015-07-18 17:13  yoleimei  阅读(132)  评论(0编辑  收藏  举报