归并排序Merger(nData, iLeft, iMid, iRight);//会出现Merger(nData,0,0,1);吧?
#include <iostream>#include <cstring>using namespace std;void Merger(int nData[], int iLeft, int iMid, int iRight) { int i, j, k; int* pnMerger = new int[iRight - iLeft + 1]; for (i = iLeft, j = iMid + 1, k = 0; i <= iMid && j <= iRight; k++) if(nData[i] <= nData[j]) pnMerger[k] = nData[i++]; else pnMerger[k] = nData[j++]; if (i <= iMid) memcpy (pnMerger + k, nData + i, (iMid - i + 1) * sizeof (nData[0])); if (j <= iRight) memcpy (pnMerger + k, nData + j, (iRight - j + 1) * sizeof (nData[0])); memcpy(nData + iLeft, pnMerger, (iRight - iLeft + 1) * sizeof (pnMerger[0])); delete[] pnMerger;}void MergerSort (int nData[], int iLeft, int iRight) { if (iLeft < iRight) { int iMid = (iLeft + iRight) / 2; MergerSort (nData, iLeft, iMid); MergerSort (nData, iMid + 1, iRight); Merger(nData, iLeft, iMid, iRight);//会出现Merger(nData,0,0,1);吧? }}int main(){ int nData[] = {13, 23, 20, 12, 15, 31, 19, 26, 24, 37}; int nSize = sizeof (nData) / sizeof (nData[0]); MergerSort (nData, 0, nSize - 1); for (int i = 0; i < nSize; i++) cout << nData[i] << " "; cout << endl;}Merger(nData, 0, 0, 1)Merger(nData, 0, 1, 2)Merger(nData, 3, 3, 4)Merger(nData, 0, 2, 4)Merger(nData, 5, 5, 6)Merger(nData, 5, 6, 7)Merger(nData, 8, 8, 9)Merger(nData, 5, 7, 9)Merger(nData, 0, 4, 9)12 13 15 19 20 23 24 26 31 37