快速排序法
image.pngfunction quick(arr) { //4.结束递归,(当arr中小于等于一项,则不用处理) if (arr.length <= 1) { return arr } //1.找到数组的中间项,在原有数组中把它移除 let middleIndex = Math.floor(arr.length / 2) let middleValue = arr.splice(middleIndex, 1)[0] //2.准备左右两个数组,循环剩下数组中的每一项,当比中间值小的放到左边数组中,反之放到右边数组中 let arrLeft = [] let arrRight = [] //3.递归方式让左右两边的数组持续这样处理,一直到左右两边都排好序为止 //到最后让左边+中间+右边拼接成最后的结果 for (let i = 0; i < arr.length; i++) { let item = arr[i] item < middleValue ? arrLeft.push(item) : arrRight.push(item) } // return quick(arrLeft).concat(middleValue, quick(arrRight)) return [...quick(leftArr),middleValue,...quick(rightArr)] }
冒泡排序法
- 冒泡排序的思想:
让数组中的当前项和后一项进行比较,如果当前项比后一项大,则两项交换位置(让大的靠后即可)
image.pngfunction bubble(arr) { let temp = null; //外层循环控制比较的轮数 for (var i = 0; i < arr.length - 1; i++) { //里层循环控制每一轮比较的次数 for (var j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j] arr[j] = arr[j + 1] arr[j + 1] = temp } } } return arr; }
插入排序
把一个数插入到一个有序数列的合理位置,并使插入后数列仍然有序,
不断重复这个过程就能使整个数组成为有序数列
function insert(ary){
// 1.准备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来
let handle=[];
handle.push(ary[0]);
// 2.从第二项开始依次抓牌,一直到把台面上的牌抓光
for(let i=1;i<ary.length;i++){
// A是新抓的牌
let A=ary[i];
// 和HANDDLE手里的牌依次比较(从后向前比)
for(let j=handle.length-1;j>=0;j--){
// 每一次要比较的手里的牌
let B=handle[j];
// 如果当前新牌A比要比较的牌B大了,把A放到B的后面
if(A>B){
handle.splice(j+1,0,A);
break;
}
// 已经比到第一项,我们把新牌放到手中最前面即可
if(j===0){
handle.unshift(A);
}
}
}
return handle;
}
let ary = [12,8,24,16,1];
ary=insert(ary);
console.log(ary);
//自己写的另一种方式
function insert(arr){
let handle = []
handle.push(arr[0])
for(var i=1;i<arr.length;i++){
for(var j=0;j<handle.length;j++){
if(arr[i]<handle[j]){
handle.splice(j,0 ,arr[i])
break;
}
if(j==handle.length){
handle.push(arr[i])
}
}
}
return handle
}