2012-04-26 150 views
-1
do 
{ 
    swap=false; 
    for(int i=0; i<256; i++) 
    { 
    if(pd[i]<pd[i+1]) 
    { 
     int temp=pd[i]; 
      pd[i]=pd[i+1]; 
      pd[i+1]=temp; 
     swap=true; 
     } 
    } 
} 
while(swap); 

它只返回前兩個結果正確,其餘爲0.我排序浮動。冒泡排序工作不正常

+1

你的意思是,你正在使用'<'操作比較浮動點? ..你需要使用epsilon。檢查這個 - http://stackoverflow.com/questions/10334688/how-dangerous-is-it-to-compare-floatingpoint-values – 2012-04-26 14:23:19

+5

@SangeethSaravanaraj:你只需要epsilon值進行平等檢查時。這是關係型的,所以它不會成爲問題。 – Skizz 2012-04-26 14:24:52

回答

9

我正在排序浮動。

在這種情況下,temp必須float類型:

float temp=pd[i]; 

否則,你每次做交換時間截斷pd[i]int

此外,如果您的float數組可能包含NaN s,則需要額外小心進行比較。

+0

我有多愚蠢? ,只是忘了臨時將temp聲明爲float。 – 2012-04-26 14:24:44

+0

@aix可以使用'>'或'<'運算符來比較浮點嗎?! – 2012-04-26 14:24:48

+0

@SangeethSaravanaraj:爲了分揀的目的,是的。除了NaNs(它們有比較棘手的比較語義)。 – NPE 2012-04-26 14:25:20

1

tempint型的,但你的陣列是float類型的...

+0

是的,我明白了,不過謝謝你的幫助。 – 2012-04-26 14:27:57