fe-interview
fe-interview copied to clipboard
[js] 第158天 举例说明数组的排序方法有哪些?
第158天 举例说明数组的排序方法有哪些?
reverse()直接颠倒数组中的元素
// 颠倒排序
var a = [1,2,3];
var b = a.reverse();
console.log(a); // [3,2,1]
console.log(b); // [3,2,1]
sort()自定义排序,基础是按照字符编码(Unicode->UTF-16)进行排序(数组在原数组上进行排序,不生成副本)
// 颠倒排序
var x = [1,3,2];
var y = x.sort((a,b) => {
// if (a < b ) {
// return -1;
// }
// if (a > b ) {
// return 1;
// }
// // a must be equal to b
// return 0;
// 以上可以简写如下
return a - b;
});
console.log(y) // [1, 2, 3]
-
for循环- 冒泡排序
function bubbleSort(arr) { var i = arr.length, j; var tempExchangVal; while (i > 0) { for (j = 0; j < i - 1; j++) { if (arr[j] > arr[j + 1]) { tempExchangVal = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tempExchangVal; } } i--; } return arr; } var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8]; var arrSorted = bubbleSort(arr); console.log(arrSorted);- 快速排序
const quickSort = (array) => { const sort = (arr, left = 0, right = arr.length - 1) => { if (left >= right) {//如果左边的索引大于等于右边的索引说明整理完毕 return } let i = left let j = right const baseVal = arr[j] // 取无序数组最后一个数为基准值 while (i < j) {//把所有比基准值小的数放在左边大的数放在右边 while (i < j && arr[i] <= baseVal) { //找到一个比基准值大的数交换 i++ } arr[j] = arr[i] // 将较大的值放在右边如果没有比基准值大的数就是将自己赋值给自己(i 等于 j) while (j > i && arr[j] >= baseVal) { //找到一个比基准值小的数交换 j-- } arr[i] = arr[j] // 将较小的值放在左边如果没有找到比基准值小的数就是将自己赋值给自己(i 等于 j) } arr[j] = baseVal // 将基准值放至中央位置完成一次循环(这时候 j 等于 i ) sort(arr, left, j - 1) // 将左边的无序数组重复上面的操作 sort(arr, j + 1, right) // 将右边的无序数组重复上面的操作 } const newArr = array.concat() // 为了保证这个函数是纯函数拷贝一次数组 sort(newArr) return newArr } console.log(quickSort([6,1,1,3,4]))
sort((a,b)=> return a - b )