合并排序算法,用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;
}
}
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;
}
}
解决方案 »
- 新浪微博接入登陆问题 -- W.widget.connectButton 退出失败?
- 获取相应事件id的全名 用那个方法
- 一个防AS写的程序里的 timeInfo
- 求:加载页面时为什么只出现了两行?正常情况下应该是四行啊
- 求用一段js,实现图片一张一张的向左或向右的循环移动
- jquery删除选中之前的所有option
- 关于Tomcat的配置问题,请大家赐教下
- 关于除以100,怎么产生.00的问题?嘿嘿
- 100 求 csdn左上边6张图变化的效果是怎么做的
- UploadiFive 如何动态传参
- 怎样取得<Form Id="10854" Name="药店销售填报单1" DetailTableType="0">里面的10854
- jquery实现图片上传前预览,兼容ie6,ie8,google
prompt(0,mergeSortPro(data,0,9).toString());
结果为:36,69,66,59,17,76,78,64,64,97
楼主也没说明你希望的排序原则是什么,也没注释。而我最受不了的就是猜代码。
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