陣列排序方法總結
阿新 • • 發佈:2021-08-02
let arr = [12, 14, 145, 167, 32, 1, 90, 78];
1、sort 排序
//升序 arr.sort((a,b) => {return a - b;}) //降序 arr.sort((a,b) => {return b - a;})
2、氣泡排序
實現思路: 1. ⽐較相鄰的元素。如果第⼀個⽐第⼆個⼤,就交換他們兩個。 2. 對每⼀對相鄰元素作同樣的⼯作,從開始第⼀對到結尾的最後⼀對。這步做完後,最後的元素會是最⼤的數。 3. 針對所有的元素重複以上的步驟,除了最後⼀個。 4. 持續每次對越來越少的元素重複上⾯的步驟,直到沒有任何⼀對數字需要⽐較。function morkArr(arr){
if(!arr.length) return
var newArr;
for(let i = 0; i < arr.length;i++){
for(let j = 0; j < arr.length - 1; j++){
if(arr[j] > arr[j + 1]){
newArr = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = newArr;
}
}}
return arr;
}
//優化版
function morkArr1(arr){
if(!arr.length) return
var newArr;
for(let i = 0; i < arr.length;i++){
let flag = false;//如果沒有交換過元素,則已經有序
for(let j = 0; j < arr.length - 1; j++){
if(arr[j] > arr[j + 1]){
newArr = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = newArr;flag = true;
}
}
if(!flag) continue3、快排 實現思路: 以陣列中間位置為基礎,迴圈比對,比中間小放左側,如果比中間值大,則放到右側陣列中 此時第一輪後將陣列分為 左側 + 中間 + 右側 分別對左側陣列執行以上兩步操作,直到拆不出陣列位置 最後拼接陣列
}
return arr;
}
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
let centerIndex = Math.floor(arr.length / 2),
centerVal = arr.splice(centerIndex, 1)[0];
let leftArr = [],
rightArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] <= centerVal) {
leftArr.push(arr[i]);
} else {
rightArr.push(arr[i]);
}
}
return quickSort(leftArr).concat(centerVal, quickSort(rightArr));
}
4、插入排序 實現思路: 首先從第一元素後面與前面對比,如果後面小於前面元素,該元素往前插入,依次類推, 已排序最後一個與後面元素對比,依次插入 function insertSort(arr){ for(let i = 0; i < arr.length; i++){ let key = arr[i]; let j = i - 1; while(j >= 0 && arr[j] > key){ arr[j + 1] = arr[j]; j -- } arr[j + 1] = key } return arr }