2011-05-26 86 views
0
function algBubble(input:Array):Array{ 
var changed:Boolean=true; 

while(changed==true){ 

    changed=false; 

    for(var i:int=0; i<input.length-1; i++){ 

     if(input[i]>input[i+1]){ 

      var temp:int=input[i]; 
      input[i]=input[i+1]; 
      input[i+1]=temp; 

      changed==true; 
     } 
    } 
} 
return input; 
} 

它似乎只运行一次阵列,而使其大部分未排序。这个冒泡排序代码有什么问题吗?

+2

你的意思是旁边的事实上,你在教室以外的其他地方使用泡沫排序? – 2011-05-26 14:05:02

+2

我不知道动作,但对我来说,它看起来像改变==真应改变=真。 – 2011-05-26 14:07:02

+3

@Paul,对于小数据集,有时对于已经大部分排序的数据,冒泡排序是_fine_。 – paxdiablo 2011-05-26 14:09:51

回答

1

我建议你改变:

changed==true; 

到:

changed = true; 

第一个做比较并将其丢弃,第二个实际上是设置changedtrue以指示交换已完成。

除了这个小问题之外,其他一切看起来都很好。

4

改变这一行

changed==true; 

changed=true; 
+0

谢谢,我不能相信我错过了 – 2011-05-27 12:52:01

0

你有一个错字: changed==true应该changed=true

1

冒泡排序是有史以来最慢的排序算法之一。

您可以通过使用这个here

你可以做如下的内置功能的Array.sort,更多信息排序任何内容:

 var test:Array = [5,3,6]; 

     private function sortArrays():void{ 
      test.sort(compareFunction); 
      trace(test);//will output 3,5,6 
     } 

     function compareFunction(a:Number, b:Number):Number { 
      if (a<b) { 
       return -1; 
      } else if (a>b) { 
       return 1; 
      } else { 
       return 0; 
      } 
     } 

干杯