已解决哪位高手帮下----急需
提问者:你眼下的痣 | 浏览次 | 提问时间: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条答案
是半角分号啊?可是这部分代码有问题 我看不出错误在哪,能解释下不?
__池池池池池
回答数:85 | 被采纳数:109
换成半角后我这里编译通过
我用的确实是半角分号;只是运行结果不是对产生的随机的折半排序。好像除了点问题,不能进行到最后,也就是无法完成折半插入排序
折半插入排序要求往一个已排序数组里插入元素后还保持排序,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; }复制代码
只用一个就可以实现折半插入排序;我试了下还是可以的。下面的可以执行:
#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;
}
谢谢啦 知道问题出在哪里了;我把for循环写错了,改下就可以了,谢谢帮助