首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

归并排序Merger(nData, iLeft, iMid, iRight);//会出现Merger(nData,0,0,1);吧?解决方案

2012-04-13 
归并排序Merger(nData, iLeft, iMid, iRight)//会出现Merger(nData,0,0,1)吧?C/C++ code#include iostr

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

热点排行