合并排序算法,用C++实现,结果是正确的,但用JavaScript使用完全相同的逻辑结构,结果却不正确,为什么?
C++代码
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <conio.h>
using namespace std;void merge(int data[],int l,int i,int r){
    for(int n=i+1; n<=r; n++)
    {
        int tmp = data[n];
        int m;
        for(m=n-1; m>=l; m--)
        {
            if(data[m] > tmp)
            {
                data[m+1] = data[m];
            }else
            {
                break;
            }
        }
        data[m+1] = tmp;
    }
}void mergeSortPro(int data[],int l,int r) {
    //if (l >= r)
    //return sourceArray;
    if(l<r)
    {
        int i = (l + r)/2;
        mergeSortPro(data, l, i);
        mergeSortPro(data, i+1, r);
        merge(data, l, i, r);
        //alert(sourceArray);
    }
    
}
int _tmain(int argc, _TCHAR* argv[])
{    int data[10] = {69,36,76,66,59,17,78,97,64,64};
    mergeSortPro(data,0,9);
    for(int i=0;i<10;i++)
    {
        cout<<data[i]<<"    ";
    }
    getch();
    return 0;
}
JavaScript代码:
function mergeSortPro(sourceArray, l, r) {
//if (l >= r)
//return sourceArray;
if(l<r)
{
var m = l;
var n = r;
i = Math.floor((m + n)/2);
mergeSortPro(sourceArray, m, i);
mergeSortPro(sourceArray, i+1, n);
merge(sourceArray, m, i, n);
//alert(sourceArray);
}
return sourceArray;
}
function merge(sourceArray, l, i, r){
for(n=i+1; n<=r; n++)
{
var tmp = sourceArray[n];
var m = 0;
for(m=n-1; m>=l; m--)
{
if(sourceArray[m] > tmp)
{
sourceArray[m+1] = sourceArray[m];
}else
{
break;
}
}
sourceArray[m+1] = tmp;
}
}

解决方案 »

  1.   

    var data = [69,36,76,66,59,17,78,97,64,64];
    prompt(0,mergeSortPro(data,0,9).toString());
    结果为:36,69,66,59,17,76,78,64,64,97
    楼主也没说明你希望的排序原则是什么,也没注释。而我最受不了的就是猜代码。
      

  2.   


    var i = Math.floor((m + n)/2);//同学,你i没val所以悲剧了...
    i = Math.floor((m + n)/2);
                mergeSortPro(sourceArray, m, i);//上行递归后下面的i+1,i被改掉了...所以结果不如期望.
                mergeSortPro(sourceArray, i+1, n);
    PS,最好把所有局部变量全部声明下...
    比如还剩n