以前上大學,沒有好好跟老師一起學習教材裡晦澀難懂的那些演算法。如果上天在給我一次機會,我一定。。屁話,言歸正傳。
氣泡排序
氣泡排序,這個名字就能想象到開水沸騰的場景,泡泡從下到上冒起,實則該排序也是有這個"冒泡「的過程。
我們來看乙個陣列$arr=[2,0,1,9,12,31,8,30],利用氣泡排序實現從小到大排序,如果是你,你會怎麼去實現呢?
是不是有這麼乙個過程:
0,0,1
0,1,2
0,1,2,8
…0,1,2,8,9,12,30,31
分析:
實現
下面給出php的示例:
// 法一:
for($i=
1,$len
=count
($arr);
$i<
$len;$i
++)}}
// 法二:
for($i=
1,$len
=count
($arr);
$i<
$len;$i
++)}}
這兩個方法最外層迴圈都是相同的,這也不奇怪,畢竟需要確定n-1個最小值,那麼 就假設它進行了n-1個過程。至於裡面的迴圈,法一的思路是從正向按順序取出乙個位置和其它位置進行比較,滿足條件交換。 法二的思路是從反向開始兩兩相鄰位置進行比較,滿足條件交換。
氣泡排序總結
$flag
=true
;for($i
=1,$len
=count
($arr);
$i<
$len
&&$flag;$i
++)}}
簡單選擇排序
大家看上面的氣泡排序,我們每次從待排序的元素(已確定的值就不再屬於待排序元素哈)中取乙個最小值的過程會發生多次交換,看起來這些交換是不是可以優化下,已顯得我們是有選擇性的進行交換,而不是盲目的?
我們來看下實現:
for($i
=1,$len
=count
($arr);
$i<
$len;$i
++)}if
($min_key
!=$i-1
)}
分析
總結
可以用來替換氣泡排序的法一實現;也算是對氣泡排序的一種優化了。
簡單選擇排序和氣泡排序
關於排序,氣泡排序和簡單選擇排序應該是最簡單的排序了 排序過程 從小到大排序比較第乙個與第二個數,若a 0 a 1 則交換 然後比較第二個數和第三個數 以此類推,直到第n 1個數和第n 個數比較為止 第一趟氣泡排序結束 陣列中最大的數被排在了最後 對前n 1個個數進行氣泡排序,結果是次大的數排在第n...
氣泡排序and簡單選擇排序
在第一趟排序中,從第乙個元素開始,掃瞄整個待排序元素序列,若相鄰的兩個元素逆序,則交換位置。直到最後乙個元素,此時,最後乙個元素必為最大的元素。第二趟排序,依然從第乙個元素開始掃瞄直到倒數第二個元素。第三趟排序,從第乙個掃瞄到倒數第三個。直到只剩乙個元素需要掃瞄。程式如下 includeint ma...
氣泡排序和簡單選擇排序實現
氣泡排序演算法的運作如下 從後往前 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較...