排序之路 氣泡排序和簡單選擇排序

2021-10-01 21:22:25 字數 1347 閱讀 9303

以前上大學,沒有好好跟老師一起學習教材裡晦澀難懂的那些演算法。如果上天在給我一次機會,我一定。。屁話,言歸正傳。

氣泡排序

氣泡排序,這個名字就能想象到開水沸騰的場景,泡泡從下到上冒起,實則該排序也是有這個"冒泡「的過程。

我們來看乙個陣列$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...

氣泡排序和簡單選擇排序實現

氣泡排序演算法的運作如下 從後往前 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較...