排序方法
一、sort
先看下sort默认排序
const sortArr = [1, 3, 2, 7, 11, 44, 32, 5, 100, 78, 66, 9, 8]; console.log(sortArr.sort()) // [1, 100, 11, 2, 3, 32, 44, 5, 66, 7, 78, 8, 9]
sort()的问题很明显,它只比较最前面的数字!
如果想用sort正常排序
// 正序 sortArr.sort((a, b) => { return a - b; }) // [1, 2, 3, 5, 7, 8, 9, 11, 32, 44, 66, 78, 100] // 倒序 sortArr.sort(function (a, b) { return b - a }) //[100, 78, 66, 44, 32, 11, 9, 8, 7, 5, 3, 2, 1]
二、冒泡排序
思路:
1、依次比较相邻的两个元素,如果前一个比后一个大,则交换位置;
2、第一轮的时候最后一个元素是最大的一个(以此类推,第二轮的时候倒数第二个元素是第二大的);
3、按照步骤一的方法进行相邻两个元素的比较,交换位置之后,由于最后一个元素已经是最大的了,所以最后一个元素不用参与下一轮比较(以此类推,第二轮结束后,后面的两个元素就不用参与下一轮的比较了)。
2、第一轮的时候最后一个元素是最大的一个(以此类推,第二轮的时候倒数第二个元素是第二大的);
3、按照步骤一的方法进行相邻两个元素的比较,交换位置之后,由于最后一个元素已经是最大的了,所以最后一个元素不用参与下一轮比较(以此类推,第二轮结束后,后面的两个元素就不用参与下一轮的比较了)。
const sortArr = [11, 2, 4, 3, 88, 90, 56, 33, 76, 100, 99, 60, 44] function bubbleSort(arr) { for (let i=0; i<arr.length; i++) { for (let j=i + 1; j<arr.length; j++) { if (arr[i] > arr[j]) { [arr[i], arr[j]] = [arr[j], arr[i]] } } } return arr; } console.log(bubbleSort(sortArr)) // [2, 3, 4, 11, 33, 44, 56, 60, 76, 88, 90, 99, 100]
三、快速排序
思路:
1、取出数组中间的一个值
2、定义两个空数组
3、循环数组中剩下的元素(步骤1之后的数组),和
4、递归调用,
pivot
;2、定义两个空数组
left
、right
;3、循环数组中剩下的元素(步骤1之后的数组),和
pivot
比较,比它小的放进left
,比它小的放进right
;4、递归调用,
left
、right
都使用快速排序处理。const sortArr = [11, 2, 4, 3, 88, 90, 56, 33, 76, 100, 99, 60, 44] function quickSort(arr) { if (arr.length <= 1) return arr; let pivotIndex = Math.floor(arr.length / 2); let pivot = arr.splice(pivotIndex, 1)[0]; let left = []; let right = []; for (let i=0; i<arr.length; i++) { if (arr[i]<pivot) { left.push(arr[i]) } else { right.push(arr[i]) } } return quickSort(left).concat(pivot, quickSort(right)) } console.log(quickSort(sortArr)); // [2, 3, 4, 11, 33, 44, 56, 60, 76, 88, 90, 99, 100]
四、选择排序
思路:
1、在数组中找到最小元素,放在起始位置;
2、从剩下的元素中,再找到第二小的元素,放在第二位;
3、以此类推,可以得到排好序的数组。
const sortArr = [11, 2, 4, 3, 88, 90, 56, 33, 76, 100, 99, 80, 44] function selectionSort(arr) { for (let i=0; i<arr.length; i++) { let index = i; for (let j=i+1; j<arr.length; j++) { if (arr[j] < arr[index]) { index = j; } } [arr[i], arr[index]] = [arr[index], arr[i]] } return arr; } console.log(selectionSort(sortArr)) // [2, 3, 4, 11, 33, 44, 56, 76, 80, 88, 90, 99, 100]
版权所有:https://www.jianshu.com/p/df55af741adb