(一)sort排序(最常用)
//数组中只有个位数时:
let ary = [1,4,4,2,6,1]
ary.sort()
console.log(ary) //[1, 1, 2, 4, 4, 6]
//错误示例:
let ary1 = [10,4,17,6,26,33]
ary1.sort()
console.log(ary1) //[10, 17, 26, 33, 4, 6],因为sort只对第一个数进行比较,所以数组中若有多位数时,要用下面这种方法
//数组中为多位数时:
let ary2 = [10,4,17,6,26,33]
ary2.sort(function(a,b){
return a-b; //(a-b)为升序,(b-a)为降序
}) //可以简写为:ary2.sort((a,b) => a-b)
console.log(ary2) //[4, 6, 10, 17, 26, 33]
(二)冒泡排序(让数组中的当前项和后一项进行比较,如果当前项比后一项大,则两项交换位置(让大的靠后)即可)
/*
bubble:实现冒泡排序
参数:ary[ARRAY] 需要排序的数组
返回值:[ARRAY]排序后的新数组
*/
function bubble(ary){
let temp = null;
//外层循环I控制比较的轮数
for(let i = 0;i<ary.length-1;i++){
//里层循环控制每一轮比较的次数J
for(let j = 0;j<ary.length-1-i;j++){
if(ary[j] > ary[j+1]){
//当前项大于后一项
temp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = temp;
}
}
}
return ary;
}
let ary = [12,8,24,16,1];
ary = bubble(ary);
console.log(ary); //[1, 8, 12, 16, 24]
(三)插入排序
/*
insert:实现插入排序
参数:ary[ARRAY]需要排序的数组
返回值:[ARRAY]排序后的新数组
*/
function insert(ary){
//1.准备一个新数组,用来存储第一个数据
let handle = [];
handle.push(ary[0]);
//2.从第二项开始直到最后
for(let i = 1;i<ary.length;i++){
let A = ary[i]; //A为新获取的数据
//从后向前比
for(let j = handle.length-1;j >= 0;j--){
let B = handle[j]; //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); //[1, 8, 12, 16, 24]
(四)快速排序
/*
quick:实现快速排序
参数:ary[ARRAY]需要排序的数组
返回值:[ARRAY]排序后的新数组
*/
function quick(ary){
//4.结束递归(当ARY中小于等于一项,则不用处理)
if(ary.length <= 1){
return ary;
}
//1.找到数组的中间项,在原有的数组中把他移除
let middleIndex = Math.floor(ary.length/2);
let middleValue = ary.splice(middleIndex,1)[0];
//2.准备左右两个数组,循环剩下数组中的每一项,比当前项小的放在左边数组中,反之放在右边数组中
let aryLeft = [],
aryRight = [];
for(let i = 0;i<ary.length;i++){
let item = ary[i];
item < middleValue ? aryLeft.push(item) : aryRight.push(item);
}
//3.递归方式让左右两边的数组持续这样处理,一直到左右两边都排好序为止(最后让左边+中间+右边拼接成为最后的结果)
return quick(aryLeft).concat(middleValue,quick(aryRight));
}
let ary = [12,8,24,16,1];
ary = quick(ary);
console.log(ary); //[1, 8, 12, 16, 24]
//递归:函数执行的时候自己调用自己