**递归二分法排序(快速排序)**
1、准备一个函数,接受一个数组
2、条件
==>先找停的条件
->只要数组的 length<=1,就停下来,直接返回原数组
==>停以外的行为
->找到一个数组长度的一半取整
->从数组里面把这个数据拆出来 splice
->准备两个新数组,一个表是左边,一个表是右边
->循环遍历被拆除一个数字的数组
->判断大小 决定放在那个数组里面
var arr = [8, 4, 3, 2, 6, 7, 1, 5, 9];
function quickSort(arr) {
//停的条件
if (arr.length <= 1) {
return arr;
}
var centerIndex = parseInt(arr.length / 2);
var center = arr.splice(centerIndex, 1)[0];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < center) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
//向里面递归
//concat不改变原始数组,concat是拼接好一会,成为一个新数组
return quickSort(left).concat(center, quickSort(right));
}
var res = quickSort(arr);
console.log(res);
//插入排序
/*
1、从1开始循环原始数组
==>第一个数字不用比
2、把当前这个数字复制一份
==>为了覆盖以后还能有这个数字
3、留下一个从那开始比的索引
4、向前比较
==>遇到比其小的,就停下来
==>如果前一个比其大,就用前一个把其覆盖
*/
var arr = [8, 4, 3, 2, 6, 7, 1, 5, 9];
for (var i = 1; i < arr.length; i++) {
var tmp = arr[i];
var j = i - 1;
while (arr[j] > tmp) {
arr[j + 1] = arr[j];
j--;
}
//while循环结束
//把其复制出来的那个数据放进去
arr[j + 1] = tmp;
}
console.log(arr);