实现的方法各种各样,就选择自个能懂得方式去实现(就个人而言)
<!--
<!--
* @Author: [you name]
* @Date: 2021-10-27 09:01:06
* @LastEditors: [you name]
* @LastEditTime: 2021-10-27 19:38:36
* @Description:
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
let quickSort = (arr) => {
//如果数组元素小于等于一个 直接输出arr
if (arr.length <= 1) {
return arr
}
//获取数组中间元素的索引下标值 如果是浮点数就向下取整
var num = Math.floor(arr.length / 2)
//利用splice(index,number) 找到数组中间元素 删除 splice()返回数组的已删除的元素也就是中间元素
var numValue = arr.splice(num, 1)
//声明分区数组 左边的元素left全部比中间元素numValue小 右边的元素right全部比中间元素numValue大
var left = []
var right = []
//利用循环将满足条件的数组元素分别放进左右分区数组
for (var i = 0; i < arr.length; i++) {
if (arr[i] < numValue) {
//全部比中间元素numValue小
left.push(arr[i])
} else {
//全部比中间元素numValue大
right.push(arr[i])
}
}
//递归 左边的分组递归输出 连接中间的元素以及右边的递归分组
return quickSort(left).concat([numValue], quickSort(right))
}
//alert(quickSort([22,11,23,8,7,2,99]));
//输出的是一个对象 所以要转类型 变成字符串再转成数组(确实有点繁琐且拉胯哈,别笑我)
let arr = quickSort([22, 11, 23, 8, 7, 2, 99]).toString()
console.log(typeof arr, arr); //string 2,7,8,11,22,23,99
// 字符串转换成数组
let newArr = arr.split(",")
console.log(typeof newArr, newArr); //object (7) ['2', '7', '8', '11', '22', '23', '99']
let dataStrArr = []
// array.forEach(function(currentValue, index, arr))
//currentValue:当前元素 index:当前元素的索引值。 arr:当前元素所属的数组对象。
newArr.forEach(function (value, index, arr) {
//+ 号是隐式转换,把字符串转换成Number类型
dataStrArr.push(+value);
});
console.log(dataStrArr); //[2, 7, 8, 11, 22, 23, 99]
</script>
</head>
<body>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。