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

这个合并排序错在哪?编译没有关问题,为什么运行不出结果?帮小弟我找找有关问题!

2012-04-04 
这个合并排序错在哪??编译没问题,为什么运行不出结果???帮我找找问题!!!#includeiostream.h#includestd

这个合并排序错在哪??编译没问题,为什么运行不出结果???帮我找找问题!!!
#include<iostream.h>
#include<stdlib.h>  
#include "time.h"
void merge(long l[],long left,long mid,long right)
{

long *a= new long [right-left+1];
mid=(right+left)/2;
long i,j,k;
while(i<=mid && j<=right)
{
if(l[i]<l[j])
a[k++]=l[i++];
else
a[k++]=l[j++];
}
while (i<=mid) a[k++]=l[i++];
while (j<=right) a[k++]=l[j++];
for(i=0,k=left;k<right;)
l[i]=a[k++];
}
void mergesort(long a[],long left,long right)
{
if(left<right)
{
long mid=(left+right)/2;
mergesort(a,left,mid);
mergesort(a,mid+1,right);
merge(a,left,mid,right);
}
}
void main()
{
const N=100000;
long a[N],i;
clock_t start, finish;
double duration;
for(i=0;i<N;i++)
a[i]=rand();
  start=clock();
mergesort(a,0,N);
finish=clock();
for(i=0;i<N;i++)
cout<<a[i];
cout<<endl;
cout<<"使用的时间为:"<<duration<<"秒"<<endl;
}








[解决办法]

C/C++ code
#include <iostream.h>#include <stdlib.h>   #include "time.h" void merge(long l[],long left,long mid,long right) {     long *a= new long [right-left+1];     //mid=(right+left)/2; //这句不要    long i=left,j=mid+1,k = 0; //没有初始化    while(i <=mid &&  j <=right)     {         if(l[i] <l[j])             a[k++]=l[i++];         else             a[k++]=l[j++];     }     while (i <=mid) a[k++]=l[i++];     while (j <=right) a[k++]=l[j++];     for(i=0,k=left;k <=right;) //错误,数组a是从0开始,l是从left开始        l[k++]=a[i++]; } void mergesort(long a[],long left,long right) {     if(left <right)     {         long mid=(left+right)/2;         mergesort(a,left,mid);         mergesort(a,mid+1,right);         merge(a,left,mid,right);     } } void main() {     const N=10000;     long a[N],i;     clock_t start, finish;     double duration;     for(i=0;i <N;i++)         a[i]=rand();     start=clock();     mergesort(a,0,N);     finish=clock();     for(i=0;i<N;i++)         cout <<a[i]<<ends;     cout <<endl;     cout <<"使用的时间为:" <<duration <<"秒" <<endl; } 

热点排行