JavaScript中關於用氣泡排序從小到大排列一組數 (詳細)!
用氣泡排序從小到大排列好一組數;
首先跟選擇排序一樣我們要了解氣泡排序的思路:
選擇排序是拿一個數依次和後面的每個數比,每一輪得出一個最大的數;
而氣泡排序則是相鄰的兩個數進行比較,如果前面的數大於後面的數,則兩個數交換位置;
//規律,n個數,比較n-1 輪, 每輪比較的次數逐漸降低
// var arr = [65, 97, 76, 13, 27, 49, 58];var temp;
//1 外層迴圈:控制比較的輪數
function sort(){
for (var i = 0; i < arr.length - 1; i++) {//2 內層迴圈:控制每一輪比較的次數,次數遞減
for (var j = 0; j < arr.length - i - 1; j++) {
//3 判斷當前項和後項的大小,如果當前項大於後項,交換兩個位置的值
if (arr[j] > arr[j + 1]) {
//4 交換
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
console.log(arr);
到這一步就基本排序完了,但是此時程式碼還可以再優化一下;
functtion sort1(){
var arr = [1, 2, 3, 5, 4];
var temp;
//1 外層迴圈:控制比較的輪數
for (var i = 0; i < arr.length - 1; i++) {
//----假設當前這一輪可以排序完畢(假設狀態)可以跳出
var flag = true;
//2 內層迴圈:控制每一輪比較的次數,次數遞減
for (var j = 0; j < arr.length - i - 1; j++) {
//3 判斷當前項和後項的大小,如果當前項大於後項,交換兩個位置的值
if (arr[j] > arr[j + 1]) {
//4 交換
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//----更改假設狀態,進入了if,說明沒有排序完畢,設定flag為false
flag = false;
}
}
//每一輪執行的時候,都有可能已經排序完畢了
//我們需要在每一輪比較結束後,去檢查當前排序的狀態,如果已經排序完畢,跳出
//是否排序完畢,我們可以通過觀察if是否被進入來確定
//結束前,進行驗證,如果到結束位置,flag值為true,說明排序完畢
if (flag) {
break;
}
}
return arr;
}
console.log(arr);