合并排序主要思想:把两个已经排序好的序列进行合并,成为一个排序好的序列。 复杂度:nlgn 稳定排序 实现 #include "stdafx.h" #define INT_MAX 9999999 // 合并[pn, pm)[pm,pn) // 其中[pn, pm)[pm,pn) 分别为已经排序的队列 void MergingSort(int nData[], int nP, int nM, int nR) { int nPrev = nM - nP; int nLast = nR - nM; int* pPrev = new int[nPrev+1]; int* pLast = new int[nLast+1]; for(int i=0; i<nPrev; i++) { pPrev[i] = nData[nP+i]; } pPrev[nPrev] = INT_MAX; for(int j=0; j<nLast; j++) { pLast[j] = nData[nM+j]; } pLast[nLast] = INT_MAX; nPrev = 0; nLast = 0; while(nP < nR) { nData[nP++] = pPrev[nPrev] < pLast[nLast] ? pPrev[nPrev++] : pLast[nLast++]; } delete [] pPrev; delete [] pLast; } bool Merge(int nData[], int nBegin, int nEnd) { if(nBegin >= nEnd-1) { return false; } int nMid = (nEnd + nBegin)/2; Merge(nData, nBegin, nMid); Merge(nData, nMid, nEnd); MergingSort(nData, nBegin, nMid, nEnd); return true; } int _tmain(int argc, _TCHAR* argv[]) { int nData[] = {1,3,5,7,9,2,4,6,8,0}; Merge(nData,0,10); for(int i=0; i<10; i++) { printf("%d", nData[i]); } return 0; }