前言
大家好,我是梁木由,一个有想头的前端,今天复习到了如何排序,那么给大家来分享下,冒泡排序与快速排序
冒泡排序
概念
从第一个元素开始,把当前元素与下一个元素进行比较,元素大的往后排,小的往前排,依次比较到最后一个元素,进行交换位置。
实现步骤
- 先遍历一共有多少个数需要跟其它数进行比较
- 再遍历每个数需要跟其它数比较多少次
- 如果前一个数小于后一个数,就交换位置
function bubbleSort(arr){
let len = arr.length;
// 遍历多少个数跟其它数进行比较
for(let i = 0; i < len; i++){
// 再遍历每个数需要跟其它数比较多少次
for(let j = 0; j < len - i - 1; j++){
// 如过前一个数小于后一个数
if(arr[j+1] < arr[j]){
// 交换位置
[arr[j+1],arr[j]] = [arr[j],arr[j+1]]
}
}
}
return arr
}
// 验证
let arr = [1,44,6,77,3,7,99,12]
console.log(bubbleSort(arr))
// [1, 3, 6, 7, 12, 44, 77, 99]
快速排序
概念
在数据集之中,找一个基准点,建立两个数组,分别存储左边和右边的数组,利用递归进行下次比较。
实现步骤
- 先做边界处理
- 定一个左右两侧的数组
- 查找数组中间位置,并获取中间位置这个数值,并在原数组删除它
- 遍历数组,判断当前项与中间位置数值的大小,大的push到右侧数组,小的push到左侧数组
- 再对两侧数组进行递归,拼接中间数值
function quickSort(arr){
// 处理边界
if(!Array.isArray(arr)) return arr;
if(arr.length <=1) return arr;
// 定义左右两侧的数组
const leftArr = [],
rightArr = [];
// 查找数组中间位置,并获取中间位置这个数值,并在原数组删除它
const midValue = arr.splice(Math.ceil(arr.length/2),1)[0];
// 遍历数组,判断当前项与中间位置数值的大小,大的push到右侧数组,小的push到左侧数组
for(let i = 0; i < arr.length; i++){
if(arr[i] > midValue){
rightArr.push(arr[i])
}else{
leftArr.push(arr[i])
}
}
// 再对两侧数组进行递归,拼接中间数值
return [...quickSort(leftArr), midValue,...quickSort(rightArr)]
}
// 验证
let arr = [1,44,6,77,3,7,99,12]
console.log(quickSort(arr))// [1, 3, 6, 7, 12, 44, 77, 99]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。