目录
一、冒泡排序
/*
* 方法名:sortArr
* 功能介绍:对数组进行排序(冒泡算法)
* arguments:
* arr(必输项):需要排序的数组;
* action(非必输项):"up"-升序,"down"-降序(默认)
* */
let sortArr = function (arr,action) {
/*判断需要排序的数据是否是数组*/
if(Object.prototype.toString.call(arr) !='[object Array]'){
console.log("请使用数组格式排序。");
return arr;
}
/*空数组或者数组1个元素,不需要排序直接跳出*/
let len = arr.length;
let temp;
if(len <= 1){
console.log("数组为空。");
return arr;
}
for(let i=0;i<len-1;i++){
for(let j=0;j<len-i-1;j++){
if(action ==="up")
{
/*升序*/
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] =temp;
}
}
else
{
/*降序*/
if(arr[j]<arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] =temp;
}
}
}
}
return arr;
}
二、二分法排序算法
思路:
【1】每一次都找到数组的中间数(midValue),作为比较基数;
【2】用数组的每一个元素(value)和中间数做比较;
【3】如果是升序,当value<midValue时,就把value放到midValue左边;当value>=midValue,就把value放到midValue右边;
【4】降序同理;
/*
* 方法名:sortArr
* 功能介绍:对数组进行排序(冒泡算法)
* arguments:
* arr(必输项):需要排序的数组;
* action(非必输项):"up"-升序,"down"-降序(默认)
* */
function sortArr(arr,action) {
/*判断需要排序的数据是否是数组*/
if(Object.prototype.toString.call(arr) !='[object Array]'){
console.log("请使用数组格式排序。");
return false;
}
/*空数组,不需要排序直接跳出*/
let len = arr.length;
let leftArr = [];//缓存左边数组
let righrArr = [];//缓存右边数组
if(len <= 1){
return arr;
}
//获取比较基准的索引
let index = Math.floor(len/2);
//通过splice获取到比较基准的数据
let midValue = arr.splice(index,1);
for(let i=0;i<arr.length;i++){
/*与基准值做比较,大的在右边,小的在左边*/
if(arr[i]>midValue){
righrArr.push(arr[i]);
}else{
leftArr.push(arr[i]);
}
}
/*通过递归进行循环排序*/
return action ==="up" ?sortArr(leftArr,action).concat(midValue,sortArr(righrArr,action))
:sortArr(righrArr,action).concat(midValue,sortArr(leftArr,action));
}