// 冒泡排序 let arr = [10, 20, 40, 60, 60, 0, 30]; /* * 總共比較次數為arr.length-1次 * 每次的比較次數為arr.length-1次 * 依次遞減 */ let temp; //交換變量標識 // 兩層for分別表示當前項與第二項 for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - 1; j++) { // 如果當前項大於第二項(后一項)則交換 if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } // 打印排序后的數組 console.log(arr); //[0, 10, 20, 30, 40, 60, 60] // 選擇排序 let arr2 = [10, 20, 40, 60, 60, 0, 30]; let temp2; //交換變量標識 // 兩層for分別表示當前項與第二項 for (let i = 0; i < arr2.length - 1; i++) { for (let j = i + 1; j < arr2.length; j++) { // 假設第二項是最小值(是則交換/否則繼續比較) if (arr2[i] > arr2[j]) { temp2 = arr2[i]; arr2[i] = arr2[j]; arr2[j] = temp2; } } } // 打印排序后的數組 console.log(arr2); //[0, 10, 20, 30, 40, 60, 60] // 希爾排序算法 function xier(arr) { let interval = parseInt(arr.length / 2); //分組間隔設置 while (interval > 0) { for (let i = 0; i < arr.length; i++) { let n = i; while (arr[n] < arr[n - interval] && n > 0) { let temp = arr[n]; arr[n] = arr[n - interval]; arr[n - interval] = temp; n = n - interval; } } interval = parseInt(interval / 2); } return arr; } let arr3 = [10, 20, 40, 60, 60, 0, 30]; // 打印排序后的數組 console.log(xier(arr3)); // sort排序 let arr4 = [10, 20, 40, 60, 60, 0, 30]; arr4.sort(function (a, b) { /* * return b-a; —> 降序排序 * return a-b; —> 升序排列 */ return a - b; }); //括號里不寫回調函數則默認按照字母逐位升序排列 // 打印排序后的數組 console.log(arr4); //[0, 10, 20, 30, 40, 60, 60] // 插入排序 let arr5 = [10, 20, 40, 60, 60, 0, 30]; for (let i = 0; i < arr5.length; i++) { let n = i; while (arr5[n] > arr5[n + 1] && n >= 0) { let temp = arr5[n]; arr5[n] = arr5[n + 1]; arr5[n + 1] = temp; n--; } } // 打印排序后的數組 console.log(arr5); //[0, 10, 20, 30, 40, 60, 60]