已解決哪位高手幫下----急需
提問者:你眼下的痣 | 瀏覽次 | 提問時間: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循環寫錯了,改下就可以了,謝謝幫助