快速排序
快速排序的算法是:
1,取出中间值;
2,把剩下的值跟中间值一一比较,比中间值小的放在left数组,比中间值大或相等的放在right数组
3,再把left 和 right 也按1.2的步骤切分,
4,利用递归的思想,直到切分到数组只剩下一个元素,终止递归
5,最后把数组拼接起来
function quickSort (arr) {
if (arr.length <= 1) {
return arr;//如果数组只有一个数,就直接返回;
}
let middleIndex = Math.floor(arr.length / 2);//找到中间数的索引值,如果是浮点数,则向下取整
let middleValue = arr.splice(middleIndex, 1)[0];//找到中间数的值
let left = [];
let right = [];
arr.map(item => {
item < middleValue ? left.push(item) : right.push(item)
})
return quickSort(left).concat([middleValue], quickSort(right));//递归不断重复比较
}
console.log(quickSort([1, 56, 2, 3, 88, 5, 66, 6, 2, 832, 45, 37, 16, 2, 87]));
//(15)[1, 2, 2, 2, 3, 5, 6, 16, 37, 45, 56, 66, 87, 88, 832]
冒泡排序
算法:
1,遍历数组,依次比较当前项和它的后面一项把大的放在后面,(第1项与第2项比较如果把较大的放在后面,第2再与第3比较,较大的放在后面…),每次遍历完最大的之就在最后面,相当于一次冒泡
2,把数组除了最后一项(最大值)外的剩余项按照1的方式,继续冒泡
3,每次比较都能找出数组中的最大值,比较数组length-1次就排序成功
function bubbleSort (arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {//比较length次
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) { //相邻元素两两对比
let temp = arr[j + 1]; //元素交换,大值放在后面
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}