氣泡排序
1,作用和原理
將陣列中的數值,按照執行的順序,從小到大排序
2,核心內容
氣泡排序
原理: 相鄰的兩個單位,比較儲存的資料
如果第乙個單元的資料較大,就將兩個相鄰單元,交換儲存資料
過程:
從起始單元開始比較,第一次迴圈,會選擇出乙個最大值,放在陣列所有單元的最後
之後,每次迴圈,都會比較出乙個本次迴圈的最大值,放在當前參與比較單元的最後
之前已經比較選出的單元,不會參與下一次比較
通過for迴圈,實現排序
每次迴圈,找到乙個當前的最大值
多次迴圈,完成排序
程式的優化
1,內層迴圈優化1 : 內層迴圈次數-1
當前位和下一位比較 i 和 i+1 比較
當前迴圈的倒數第二位,已經和最後一位進行比較
當前迴圈的最後一位,只需要通過倒數第二位,參與比較
不用參與迴圈
2,外層迴圈優化 :
如果有n個單元參加排序,只需要迴圈排序n-1次
最後一次迴圈排序,會將最後兩個數值的大小排序確定
剩下最後乙個單元,沒有迴圈排序,但是大小已經確定,不需要再次迴圈排序
3,內層迴圈優化2 :
第一次排序,少0個單元參與
第二次排序,少1個單元參與
第三次排序,少2個單元參與
........
通過外層迴圈變數,定義是從 0 開始的迴圈數值
每次內層迴圈,次數,再減去 外層迴圈變數 的數值
具體** :
// 外層迴圈,迴圈執行排序操作,迴圈次數是陣列單元個數-1
for(
var j =
0; j <=
(arr.length-1)
-1; j++)}
}
console.
log(arr)
;
選擇排序
先定義迴圈的起始位置預設為最小值所在位置
從起始位置下乙個位置開始,執行迴圈
如果有位置上的數值,小於,儲存索引位置上的數值
就儲存這個位置的索引值
迴圈結束,比較儲存的索引,是否是起始位置索引
如果不是,就交換兩個位置上的數值
會將本次迴圈的最小值,放置在迴圈的起始位置上
再執行多次迴圈,完成排序
核心 : 找到最小值的索引,與起始位置交換數值
先找索引 在交換數值
優化 : 1,之前比較的數值不參與一次標記
2,n個單元,只要比較n-1次
從起始位置開始,找最小的數值所在的索引下標
如果最終儲存的索引下標,不是起始位置,就與起始位置交換儲存資料
執行一次迴圈,會將最小值儲存在起始位置上
下一次迴圈,之前的起始位置,不再參與迴圈
外層迴圈:實現迴圈次數,是陣列單元個數-1
內層迴圈:每次迴圈,將本次迴圈找出來的最小值,與起始位置進行數值交換
先預設起始位置的數值為最小值,儲存起始位置的索引值
之後從起始位置的下乙個位置開始迴圈,生成之後的所有索引下標,
如果之後位置上的數值,小於儲存的索引位置的數值,就儲存這個數值的索引
迴圈結束,變數中儲存本次內層迴圈選擇出的最小值的索引下標
進行比較判斷,如果這個索引值,不是起始索引值,就交換兩個索引值對應的資料
程式的優化:
外層優化:之前比較出的數值,不參與下一次的比較
內層優化:從起始位置的下乙個位置開始迴圈
具體**:
var arr =[3
,44,38
,5,47
,25,36
,2,79
,8,1
];// console.log(arr);
// 外層迴圈,實現排序迴圈次數,次數是單元個數 -1
for(
var j =
0; j <= arr.length-1-
1; j++)}
// 內層迴圈執行完畢,儲存的索引下標如果不是起始的索引j
// 就交換 min中儲存的索引下標對應的數值 和 j索引下標應的數值
if(min != j)
} console.
log(arr)
;
排序 氣泡排序和選擇排序
目錄 氣泡排序 氣泡排序原理圖 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 ...