js 排序 冒泡、快速、選擇、插入
阿新 • • 發佈:2018-03-07
key 遍歷 style 最小 right cat ice spl 找到
// 1.插入排序 // 從第一個元素開始,該元素可以認為已經被排序; // 取出下一個元素,在已經排序的元素序列中從後向前掃描; // 如果該元素(已排序)大於新元素,將該元素移到下一位置; // 重復步驟3,直到找到已排序的元素小於或者等於新元素的位置; // 將新元素插入到該位置後; // 重復步驟2~5。 function insertSort (arr) { var _arr = [].concat(arr) var len = _arr.length for (var i = 1; i < len; i++) { var key = _arr[i] var j = i - 1 while(j >= 0 && _arr[j] > key) { _arr[j + 1] = _arr[j] j-- } _arr[j + 1] = key } return _arr } console.log(insertSort([2, 3, 4, 1, 4, 7, 9, 8])) // [ 1, 2, 3, 4, 4, 7, 8, 9 ] // 2.快速排序 // 1.先從數列中取出一個數作為基準數。 // 2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。 // 3.再對左右區間重復第二步,直到各區間只有一個數。function quickSort (arr) { if (arr.length < 2) { return arr } var left = [], right = [], mid = arr.splice(Math.floor(arr.length / 2), 1) for (var i = 0; i < arr.length; i++) { if (arr[i] < mid) { left.push(arr[i]) } else { right.push(arr[i]) } }return bubbleSort(left).concat(mid, bubbleSort(right)) } console.log(quickSort([1, 4, 2, 3, 8, 10, 6, 5])) // [ 1, 2, 3, 4, 5, 6, 8, 10 ] // 3.冒泡排序 // 比較相鄰的前後二個數據,如果前面數據大於後面的數據,就將二個 數據交換。 // 這樣對數組的第0個數據到N-1個數據進行一次遍歷後,最大的一個數據就“沈”到數組第N-1個位置。 // N=N-1,如果N不為0就重復前面二步,否則排序完成。 function bubbleSort (arr) { for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j] arr[j] = arr[j + 1] arr[j + 1] = temp } } } return arr } // 4. 選擇排序 // 比如在一個長度為N的無序數組中,在第一趟遍歷N個數據,找出其中最小的數值與第一個元素交換,第二趟遍歷剩下的N-1個數據,找出其中最小的數值與第二個元素交換……第N-1趟遍歷剩下的2個數據,找出其中最小的數值與第N-1個元素交換,至此選擇排序完成。 function selectSort (arr) { var min, temp for (var i = 0; i < arr.length - 1; i++) { min = i for (var j = i + 1; j < arr.length; j++) { if (arr[j] < arr[min]) { min = j } } temp = arr[i] arr[i] = arr[min] arr[min] = temp } return arr } console.log(selectSort([1, 4, 2, 5, 8, 6, 7]))// [ 1, 2, 4, 5, 6, 7, 8 ]
js 排序 冒泡、快速、選擇、插入