2011-05-26 82 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; 
      } 
     } 

乾杯