思路分析:在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
最近在學php,就以php以寫了**。
**實現:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function bubblesort($arr)}}
return $arr;}
這是氣泡排序的基本思路,把最小的數字乙個乙個的擠出來,順序冒泡出來。
這裡有一種情況比較特殊,就是當第n個數字後面的順序已經排好了,程式還要從第n個及其後繼續氣泡排序,這屬於不必要的浪費。
那麼就在外迴圈中加入一條判斷語句,判斷第n次迴圈的時候,是不是有數字交換的過程,如果有,則繼續外層迴圈;如果沒有,說明第n個數字開始已經排序好了,則停止外層迴圈(還是浪費一次)。
修改**實現:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function bubblesort($arr)}
if(!flag)
$flag=false; //如果這次外迴圈有數字交換,則重新把flag置為false,再次外迴圈
}return $arr;}
昨天有個新來的同事問關於排序的優化的問題,想到以前學排序時所思所想,雖然已經有大牛把這個思路老早就想出來了,但我沒有看到,是自己想出來的,有些小得意,記錄下來。(補記於發表日期)
改進 優化 冒泡法排序
class bubblesort j static void print int mintarr i static void change refint i1,ref inti2 static void bubblesort int a,outintn 如果查詢一次後發現不需交換,說明已經排完序 可...
關於氣泡排序的淺層優化
排序演算法優化 以從小到大排序為例 這種優化只是減少了外層迴圈次數,內層的迴圈次數並沒有減少 function sort arr else if count arr.length 1 var a 1 2,3 4,5 7,6 sort a sort2 a 第二種與第一種一樣 同樣沒有減少內層迴圈次數 ...
氣泡排序法及簡單優化
鞏固自己學習,方便新手,把自己學習的寫出來,有錯誤的敬請指出。氣泡排序法我理解的三點 外迴圈 迴圈變數i,可以理解為對i位置排序。內迴圈 針對i位置,通過內迴圈,把大的數放在i位置。變數change 如果內迴圈不把change置為1說明排序已經結束。具體 如下 有注釋 include int mai...