當前位置:係統粉 > 電腦問答 > 其他問答 > 哪位高手幫下----急需

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

提問者:你眼下的痣  |  瀏覽 次  |  提問時間: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 係統粉 版權聲明 最新發布內容 網站導航