2012-04-26 102 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