c語言實現選擇排序與氣泡排序

2021-09-25 10:40:03 字數 2004 閱讀 6672

「冒泡」這個名字的由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。

這裡以從小到大排序為例進行講解。 基本思想及舉例說明氣泡排序的基本思想就是不斷比較相鄰的兩個數,讓較大的元素不斷地往後移。經過一輪比較,就選出最大的數;經過第2輪比較,就選出次大的數,以此類推。

下面以對 3 2 4 1 進行氣泡排序說明。

第一輪 排序過程

3 2 4 1 (最初)

2 3 4 2 (比較3和2,交換)

2 3 4 1 (比較3和4,不交換)

2 3 1 4 (比較4和1,交換)

第一輪結束,最大的數4已經在最後面,因此第二輪排序只需要對前面三個數進行再比較。

第二輪 排序過程

2 3 1 4 (第一輪排序結果)

2 3 1 4 (比較2和3,不交換)

2 1 3 4 (比較3和1,交換

第二輪結束,第二大的數已經排在倒數第二個位置,所以第三輪只需要比較前兩個元素。

第三輪 排序過程

2 1 3 4 (第二輪排序結果)

1 2 3 4 (比較2和1,交換)

至此,排序結束。 演算法總結及實現對於具有n個元素的陣列r[n],進行最多n-1輪比較;

推,直到整個陣列從小到大排序。

下面給出了氣泡排序的一般實現和優化實現。一般實現是教科書裡常見的實現方法,無論陣列是否排序好了,都會進行n-1輪比較; 而優化實現,在陣列已經排序好的情況下,會提前退出比較,減小了演算法的時間複雜度。

在這裡插入**片

#include main()

if(flag==0) break;

}printf("paixu

hou:\n");

for(i=0;i<10;i++)

printf("%4d",a[i]);

}

選擇排序是一種簡單直觀的排序演算法。它與氣泡排序很相似,都是比較 n-1 輪,每輪都是比較 n–1–i 次,每輪找出乙個最大值或最小值。

但是,氣泡排序是將每輪找出的最值放到最右邊,而選擇排序是將每輪找出的最值放到最左邊。並且在演算法上,氣泡排序是將相鄰的數進行逐個比較,以從小到大排序為例,只要前面的比後面的大,就互換這兩個數,直到最後將最大的數「浮」到最右邊,如此依次迴圈。而選擇排序是先儲存第乙個元素的下標,然後後面所有的數依次與第乙個元素相比,如果遇到更小的,則記錄更小的那個數的下標,然後後面所有的數都依次與那個更小的數比較,直到最後將最小的數的下標找出來,然後再將這個數放到最左邊,即與下標為 0 的數互換。如果最小的數的下標就是 0 那麼就不用互換。

所以,選擇排序演算法是先判斷最小的數的下標是不是 0,如果不是則說明最小的數不是第乙個元素,則將這個數與第乙個元素互換位置,這樣一輪下來最小的那個數就被找到並放到了最左邊。

在第二輪同樣先儲存新序列第二個元素的下標,後面所有的數依次與第二個元素相比較,如果遇到更小的則記錄更小的那個數的下標,然後後面所有的數都依次與那個更小的數比較,直到最後又找到乙個最小的,此時這個最小的在整個序列中是「第二小」。然後再判斷這個數的下標是否等於 1,如果不等於 1 說明「第二小」的那個數不是第二個元素,則將這個數與第二個元素互換位置,這樣第二輪下來就找到了「第二小」的那個數,並將它放到了第二個位置。如此迴圈,直到整個序列實現從小到大排序。

如果是從大到小排序,那麼就記錄大的那個數的下標,每一輪找出乙個最大的數放到左邊。

從上面的分析可以看出,選擇排序和氣泡排序的另乙個不同點是,氣泡排序只要遇到前面比後面大的就互換,而選擇排序是比較一輪才互換一次,而且如果本輪中最小的就是最左邊那個數則不用互換。所以從這個角度看,選擇排序比氣泡排序的效率要高。而且通過上面對選擇排序的分析發現,從邏輯上講,與氣泡排序相比,選擇排序更符合人的思維。

下面來寫乙個程式,用選擇排序實現乙個序列的從小到大排序:

#include int main()

if(minindex!=i)

}printf("選擇排序由小到大的順序為:\n");

for(i=0;i<5;i++)

printf("%4d",a[i]);

}

氣泡排序和選擇排序c語言實現

說明 執行程式先輸入乙個數,為陣列的長度,會隨機生成乙個陣列,然後分貝用選擇排序和氣泡排序實現從小到大的排序.實驗結果 選擇排序演算法,從小到大 int temp 0 for int i 0 i n i 氣泡排序演算法,從小到大 for int i 0 i n i for int i 0 i n i...

氣泡排序和選擇排序(Go語言實現)

氣泡排序和選擇排序是排序演算法中比較簡單和容易實現的演算法。氣泡排序的思想為 每一次排序過程,通過相鄰元素的交換,將當前沒有排好序中的最大 小 移到陣列的最右 左 端。而選擇排序的思想也很直觀 每一次排序過程,我們獲取當前沒有排好序中的最大 小 的元素和陣列最右 左 端的元素交換,迴圈這個過程即可實...

氣泡排序 c語言實現

氣泡排序 排序思想 1.對於乙個長度為n的陣列,進行n 1次迴圈 2.第一次次迴圈中,先將1和2元素比較,如果元素1比元素2大,則交換其位置,接著比較元素2和元素3,以此類推,最終最大的元素排在最後一位 3.接著第二次迴圈,要排序的元素個數減少乙個 最大的已經放在最後一位 重複2的過程 4.這樣,每...