let arr = [23, 56, 520, 920, 888, 666];
// 冒泡排序(写法一)
function mp1(arr) {
if (arr.length < 2) {
return arr
} else {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
return arr //一定要return出来,不然就是undefined
}
}
console.log(mp1(arr)); //打印 [23, 56, 520, 666, 888, 920]
let arr = [23, 56, 520, 920, 888, 666];
// 冒泡排序(写法二)
function mp2(arr) {
if (arr.length < 2) {
return arr
} else {
for (let i = 0; i < arr.length - 1; 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(mp2(arr)); //打印 [23, 56, 520, 666, 888, 920]
let arr = [23, 56, 520, 920, 888, 666];
// 快排(写法一)
function findMid(arr, left, right) {
let x = arr[left];
let i = left;
let j = right;
while (i < j) {
//先从前往后找小的,没找的的话一直继续
while (i < j && arr[j] > x) {
j--;
}
//找到了,将值填入坑里面,a[j]又变成了坑
if (i < j) {
arr[i] = arr[j];
}
//然后从前往后找大的,没找到继续找。
while (i < j && arr[i] < x) {
i++;
}
//找到了,将值填入之前的坑里。
if (i < j) {
arr[j] = arr[i]
}
}
//将基准值填入坑
arr[i] = x;
return i;
}
function kp1(arr, left, right) {
let length = arr.length;
let start = left || 0;
let end = right !== undefined ? right : length - 1;
if (start < end) {
let index = findMid(arr, start, end)
kp1(arr, start, index - 1); //调整基准值左边
kp1(arr, index + 1, end); //调整基准值右边
}
return arr;
}
console.log(kp1(arr)); //打印 [23, 56, 520, 666, 888, 920]
let arr = [23, 56, 520, 920, 888, 666];
// 快排(写法二)
function kp2(arr) {
if (arr.length <= 1) {
return arr;
}
let leftArr = [];
let rightArr = [];
let q = arr[0];
for (let i = 1; i < arr.length; i++) {
if (arr[i] > q) {
rightArr.push(arr[i])
} else {
leftArr.push(arr[i])
}
}
return [].concat(kp2(leftArr), [q], kp2(rightArr));
}
console.log(kp2(arr)); //打印 [23, 56, 520, 666, 888, 920]