係統粉 > 電腦問答 > 其他問答

已解決哪位高手幫下----急需

提問者:你眼下的痣  |  瀏覽次  |  提問時間: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

我用的確實是半角分號;隻是運行結果不是對產生的隨機的折半排序。好像除了點問題,不能進行到最後,也就是無法完成折半插入排序 (1)
2017-01-29 23:49:55
讚 7
碧水搖光

碧水搖光

回答數:61  |  被采納數:75

折半插入排序要求往一個已排序數組裏插入元素後還保持排序,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; }複製代碼
2017-01-30 04:55:28
讚 6
の卡車死機の

の卡車死機の

回答數:64  |  被采納數:140

隻用一個就可以實現折半插入排序;我試了下還是可以的。下麵的可以執行:

#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;
}
2017-01-30 03:55:13
讚 6
重慶衛視外交

重慶衛視外交

回答數:64  |  被采納數:60

謝謝啦 知道問題出在哪裏了;我把for循環寫錯了,改下就可以了,謝謝幫助
2017-01-29 21:16:34
讚 6
相關問答
最新其他問答
解決方法