初看氣泡排序和直接選擇排序不禁會問它們有什麼區別? 的確, 它們的基本思想是一樣的. 都是通過一輪的迴圈找到所要排序數中的最值(最大值或最小值), 然後將最值置於頂端. 它們的區別主要體現在對其他數(非最值)的處理上.
氣泡排序: 通過相鄰的兩個數的比較, 根據需要決定是否將兩個數互換位置, 然後將比較往前(或往後)推進. 例如, 要求從小到大排序. 通過將兩個數比較, 將較大的數置換到右邊. 如此不斷迴圈將得到最值.
選擇排序: 和氣泡排序不同, 選擇排序使用標記最值所在位置的方式, 查詢最值過程中不移動數字置, 只是在最後將最值置換到頂端.
直接選擇排序**:
void sort(int a,int n)}}
冒泡選擇排序:
void bubble_sort(int a,int n)}}
} 從上兩段**可以看出,它們處於同乙個數量級,即時間複雜度是相同的,都用了兩層迴圈,為o(n^2)(n:排序個數); 但是內層迴圈中,氣泡排序的互換位置的操作從概率上講要明顯多於選擇排序. 整個排序演算法,選擇排序換位操作為o(n),二氣泡排序為o(n^2/2). 所以綜合來講選擇排序的時間效率要高於氣泡排序.
所以在冒泡程式中,是可以進行優化的,當某一次程式可以已經實現了陣列有序,則無需再排序
這裡設定乙個變數ischange,初始化置1,當進入內層迴圈時先置0,當判斷這一層有需要調整時,置1
若無需調整說明陣列已經有序,則無需再去排序了。程式如下:
void bubble_sort1(int a,int n)}}
}
排序 氣泡排序和選擇排序
目錄 氣泡排序 氣泡排序原理圖 demo 執行 選擇排序 氣泡排序原理圖 demo 執行 說明 include include using namespace std name 氣泡排序法 number 傳入陣列 length 陣列長度 setw 需要匯入 include ps 這是乙個lib.h的...
選擇排序和氣泡排序
選擇排序和氣泡排序 演算法 蠻力法選擇排序,第一次掃瞄整個陣列,找到最小元素,然後和第乙個元素交換。第二次從第二個元素開始掃瞄陣列,找到剩下的元素中最小的與第二個元素交換位置,直到最後。89 45 68 90 29 3417 17 45 68 902934 89 17 29 68 90 453489...
選擇排序和氣泡排序
選擇 從小到大排序 int a 5 a 0 a 1 a 2 a 3 a 4 5 4 3 2 1 1 5 4 3 2 第一輪比較 拿a 0 和後面的元素依次比較 如果a 0 a i 那麼兩個數交換 1 2 5 4 3 第二輪比較,拿a 1 和後面的元素依次比較,如果a 1 a i 那麼兩個數交換 1 ...