1.冒泡排序
核心思想:讓數組中的當前項和後一項進行比較,如果當前項比後一項大,則兩項交換位置,讓大的靠後即可
代碼:
1 let arr = [12,8,24,16,1] 2 function bubble(arr){ 3 let temp = null 4 for(let i = 0; i < arr.length - 1; i++){ 5 for(let j = 0; j < arr.length - 1 - i; j++){ 6 if(arr[j] > arr[j+1]){ 7 temp = arr[j+1] 8 arr[j+1] = arr[j] 9 arr[j] = temp 10 } 11 } 12 } 13 return arr 14 } 15 console.log(bubble(arr)); //[ 1, 8, 12, 16, 24 ]
2.插入排序
核心思想:同抓牌一樣,拿抓到的新牌和手裏最後面的牌進行比較,如果新牌大於最後面的牌,則將新牌直接放到最後面;如果新牌小於最後面的牌,則和倒數第二張牌進行比較,...直到新牌大於比較的牌,則將新牌放於所比較牌的後面既可
1 let arr = [12,8,24,16,1] 2 function insert(arr){ 3 let handle = []//新數組 4 handle[0] = arr[0] 5 for(let i = 1; i < arr.length; i++){ 6 var A = arr[i];//新牌 7 for(let j = handle.length - 1; j >= 0; j--){ 8 var B = handle[j] //手裏的牌 9 if(A > B){ //新牌若大於手裏的牌 則放入新牌後面 並結束這次循環 10 handle.splice(j+1, 0 ,A) 11 break; 12 } 13 if(j === 0){ //比到第一項時 直接放到第一項前面 14 handle.unshift(A) 15 } 16 } 17 } 18 return handle 19 } 20 console.log(insert(arr));
3.快速排序
核心思想:找到數組中的中間項M,然後將數組中剩餘元素組成的數組依次和中間項M進行比較,比M小的放在M左邊數組,比M大的放在右邊的數組,然後將左邊和右邊的數組再重複操作,直到左邊和右邊的數組每項爲一個元素時,將左邊的數組加中間項再加右邊的數組
就是所要的新數組
代碼:
1 let arr = [12,8,15,16,1,32] 2 function quick(arr){ 3 if(arr.length <= 1){ //當數組小於或者大於1項時,不用處理 4 return arr 5 } 6 let middleIndex = Math.floor(arr.length/2), //中間項的位置 7 middleValue = arr.splice(middleIndex,1)[0]; //中間項元素的值 將中間項從原數組中去掉 8 let arrLeft = [], 9 arrRight = []; 10 for(let i = 0; i< arr.length; i++){ 11 let item = arr[i] //當前項 12 //將當前項和中間項進行比較 大的放在arrRight數組中 小的放在arrLeft數組中 13 item > middleValue ? arrRight.push(item) : arrLeft.push(item) 14 } 15 //左邊的 + 中間的 + 右邊的 16 return quick(arrLeft).concat(middleValue,quick(arrRight)) 17 } 18 console.log(quick(arr)); //[ 1, 8, 12, 15, 16, 32 ]