JS算法入門(2)- 排序

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 ]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章