归并排序Merger(nData, iLeft, iMid, iRight);//会出现Merger(nData,0,0,1);吧?
- C/C++ code
#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;}[解决办法]
会出现的,打印为证,下面的为打印
- Assembly code
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