当前位置:系统粉 > 电脑问答 > 其他问答 > 哪位高手帮下----急需

哪位高手帮下----急需

提问者:你眼下的痣  |  浏览 次  |  提问时间:2017-01-29  |  回答数量:7

哪位高手帮下----急需 折半插入排序算法性能分析:要求实现折半插入排序分别随机生成50、100、500、1000、5000、10000个数据,统计在这些数据上程序的执行时间下面代码总有错误改不出来,希望高手帮下忙:#include <iostream> #include <cstdio> #include <math.h>#include <cstdlib> #include <time.h>using namespace std; //const int n = 100; int n=100;//scanf(\"%d\",&n);void swap(int *a,int i,int j) { int temp; temp = a; a = a[j]; a[j] = temp; } void binaryinsertsort(int * a,int n){int i,j,low,high,mid;for(i=1;i<n;++i){a[0]=a;low = 1;high = i- 1;while(low <= high){mid

已有7条答案
丿落灬尘

丿落灬尘

回答数:38  |  被采纳数:113

2017-01-29 17:54:04
把所有的全角分号替换成半角分号
赞 3
grorie

grorie

回答数:26  |  被采纳数:135

2017-01-29 17:36:49
是半角分号啊?可是这部分代码有问题 我看不出错误在哪,能解释下不?
赞 2
__池池池池池

__池池池池池

回答数:85  |  被采纳数:109

2017-01-29 20:20:04
换成半角后我这里编译通过
赞 8
建川i

建川i

回答数:76  |  被采纳数:52

2017-01-29 23:49:55
我用的确实是半角分号;只是运行结果不是对产生的随机的折半排序。好像除了点问题,不能进行到最后,也就是无法完成折半插入排序 (1)
赞 7
碧水摇光

碧水摇光

回答数:61  |  被采纳数:75

2017-01-30 04:55:28
折半插入排序要求往一个已排序数组里插入元素后还保持排序,binaryinsertsort里只用一个数组应该不行,换成 int findid(int *a,int n,int val) { if(n==0)return 0; int ubound,lbound,i; lbound=0; ubound=n-1; i=(ubound+lbound)/2; while(1) { if(a[i]<val) { lbound=i; i=(ubound+lbound)/2; } else if(a[i]>val) { ubound=i; i=(ubound+lbound)/2; } else if(a[i]==val)return i; if(ubound-lbound==1) { if(a[ubound]<val)return n; if(a[ubound]==val)return ubound; if(a[lbound]>=val)return 0; return ubound; } else if(ubound==lbound) { if(a[i]<val)return n; else if(a[i]>val)return lbound; else return i; } } } void binaryinsertsort(int * a,int n) { int*b=new int[n]; for(int i=0;i<n;i++) { int id=findid(b,i,a[i]); memmove(b+id+1,b+id,(n-id)*sizeof(int)); b[id]=a[i]; } memcpy(a,b,n*sizeof(int)); delete[]b; }复制代码
赞 6
の卡车死机の

の卡车死机の

回答数:64  |  被采纳数:140

2017-01-30 03:55:13
只用一个就可以实现折半插入排序;我试了下还是可以的。下面的可以执行:

#include <iostream>
#include <cstdio>
#include <math.h>
#include <cstdlib>
#include <time.h>
int n=500;
void Binsersort(int a[],int n)
{
int i,j,mid,high,low;

for(i=2;i<=n;++i)
{a[0]=a;
low=1; high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>a[0])
high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=high+1;--j)
a[j+1]=a[j];
a[high+1]=a[0];
}
}

void printarray(int a[],int n)
{
printf("输出数据:");

for(int i=1;i<n;i++)
{
printf("%d",a);
if((i+1)%10 == 0)
printf("\n");
}
printf("\n");
}

int main(int argc,char *argv[])
{
srand(time(NULL));
double start,end,t;
int a[10000];
start=clock();
for(int i=1;i<=n;i++)
a= rand()%1000;
printarray(a,n);
Binsersort(a,n);
printarray(a,n);
end=clock();
t=end-start;
printf("t=%f秒",t);
return 0;
}
赞 6
重庆卫视外交

重庆卫视外交

回答数:64  |  被采纳数:60

2017-01-29 21:16:34
谢谢啦 知道问题出在哪里了;我把for循环写错了,改下就可以了,谢谢帮助
赞 6
解决方法
  • 电脑死机不用愁 高手帮你揭开秘密

    电脑死机不用愁 高手帮你揭开秘密

      死机是令操作者颇为烦恼的事情。死机时的表现多为“蓝屏”,无法启动系统,画面“定格”无反应,鼠标、键盘无法输入,软件运行非正常中断等。尽管造成死机的原因很多,但是万变不离其宗...

  • 高手帮你电脑没有声音的问题

    高手帮你电脑没有声音的问题

      电脑没声音看似简单,其实有时问题比较复杂,既涉及到硬件方面的问题又涉及到软件方面的问题 因此,要先查明原因,看是软件还是硬件出了故障,然后针对问题对症下药 千万不能原因不明...

  • 忘记windows xp系统密码?高手帮你轻松解决

    忘记windows xp系统密码?高手帮你轻松解决

      Windows XP是一个比较安全的操作系统,每次启动时都要求选择账户并输入密码,那么如果忘记系统密码了,?而且在安装时也没有做相应的应急盘,怎么办呢?于是小编经过多...

  • 高手轻松帮你解决xp无法安装字体问题

    高手轻松帮你解决xp无法安装字体问题

      操作系统里面都有很多字体,这是众所周知的事实,但是使用不同的字体在网页设计和图像处理上面有不同的显示效果。那么对于初学者来说,该如何安装字体呢?可能很多朋友遇到过这样...

版权信息

Copyright @ 2011 系统粉 版权声明 最新发布内容 网站导航