快速排序
var list = [7,8,6,5,10,13,14,100,99,98,101]
function fast(list) {
if(!list.length) return []
let left = [],right = []
let point = list.shift()
for(let i=0;i<list.length;i++) {
list[i]<point ? left.push(list[i]) : right.push(list[i])
}
return fast(left).concat(point,fast(right))
}
fast(list)
解析
- 通过构造左右两个数组不断shift取出数组第一个 进行大小比较
- 小的放入left其余的放入right
- 不断递归concat拼接
- !list.length的时候终止完成排序
选择排序
- 选择排序没有冒泡排序那么频繁 只有选中小的值的时候才会进行交换
- 最小的依次从左排列
- 冒泡排序是不断把最大值排到右边去从小到大
function choose(arr) {
for(let i=0;i<arr.length;i++) {
let min = arr[i]
for(let j=i+1;j<arr.length;j++) {
if(arr[j]<min) {
let val = min
min = arr[j]
arr[j] = val
}
arr[i] = min
}
}
return arr
}
插入排序
function insertSort (arr) {
var len = arr.length
var prev, current
for (var i = 1; i < len; i++) {
prev = i - 1
current = arr[i]
while (prev >= 0 && arr[prev] > current) {
arr[prev + 1] = arr[prev];
prev--
}
arr[prev + 1] = current
}
return arr
}
-
从数组的第二个数据开始往前比较,即一开始用第二个数和他前面的一个比较,如果 符合条件(比前面的大或者小,自定义),则让他们交换位置。
-
因为每次都是排列奥当前的数据内部while循环给 prev排好位置
-
外面直接arr[prev+1] = current 当前的current就排序到了对应的位置