读书人

归并排序Merger(nData, iLeft, iMid,

发布时间: 2012-04-13 13:50:24 作者: rapoo

归并排序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 

读书人网 >C++

热点推荐