标签:
一 归并排序
归并排序采用分治策略,对无序数组进行递归二分,二分并排序完后再合并。需要额外的内存空间。
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 }
标签:
原文地址:http://www.cnblogs.com/yoleimei/p/4657242.html