1. 程式人生 > >js 冒泡排序與快速排序

js 冒泡排序與快速排序

其他 位置 [] arr 冒泡 console ray lse length

剛好今晚看了js的冒泡排序跟快速排序,趁著還沒忘記先記下來。

1. 冒泡排序:遍歷數組,每個元素都與後一個元素比較,如果大於下一個元素,則兩個元素位置調換。否則的話當前元素再與下下個元素比較,一直到 跟後面的元素都比較完。這個是升序的排序,降序則相反。

 1 var arr = [1,23,4,12,32,455,122,3,43,13];
 2 
 3 function bubbleSort(arr) {
 4     for (let i = 0; i < arr.length - 1; i++) {
 5         for(let j = i + 1; j < arr.length; j++) {
6 if (arr[i] > arr[j]) { 7 let maxVal = arr[i]; 8 arr[i] = arr[j]; 9 arr[j] = maxVal; 10 } 11 } 12 } 13 return arr; 14 } 15 console.log(‘bubble sort: ‘, bubbleSort(arr));

2. 快速排序:是對冒泡排序的一種改進。

  • 先從數組裏面選出一個數,一般都是第一個數即array[0],然後再將其他數據分成兩個數組,小於array[0]的放在左邊數組,大於的放在右邊數組。
  • 對兩個數組進行遞歸排序(按照1步驟),直到數組長度 <= 1,跳出遞歸(這個是主要條件,不然會陷入死循環)。
  • 將數據 concat 成一個最終的數組。這個是升序的排序,降序則相反。
 1 var arr = [1,23,4,12,32,455,122,3,43,13];
 2 function quickSort(arr) {
 3     if (arr.length <= 1) {
 4         // 註意加這個條件,不然死循環
 5         return arr;
 6     }
 7     var reference = arr[0];
8 var leftList = []; 9 var rightList = []; 10 arr.forEach(item => { 11 if (item > reference) { 12 rightList.push(item); 13 } else if (item < reference) { 14 leftList.push(item); 15 } 16 }) 17 18 return quickSort(leftList).concat(reference, quickSort(rightList)); 19 } 20 console.log(‘quick sort: ‘ , quickSort(arr))

js 冒泡排序與快速排序