Javascript常见的数组排序方法

常见的数组排序方法

1.冒泡排序

(bubble sort)

//将最大的数值不断的交换放在最后的方式叫做冒泡
var arr=[2,5,1,7,18,1,2,9,5,3,12,11,2,13];
for(var i=0;i<arr.length;i++){
    for(var j=0;i<arr.length-1-i;i++){
         if(arr[j]>arr[j+1]){
             var temp= arr[j+1];
             arr[j+1]=arr[j];
             arr[j]=temp;
             /*或者使用结构赋值
             [arr[j],arr[j+1]]=[arr[j+1],arr[j]]
             */
         }
    }
}
//可以去添加一个开关 用来检查数组是否还在交换,如果没有交换可以跳出程序,用于提升性能
for(var i=0;i<arr.length;i++){
    for(var j=0;i<arr.length-1-i;i++){
        var flag=true;
         if(arr[j]>arr[j+1]){
             var temp= arr[j+1];
             arr[j+1]=arr[j];
             arr[j]=temp;
             /*或者使用结构赋值
             [arr[j],arr[j+1]]=[arr[j+1],arr[j]]
             */
             flag=false;
         }
        if(flag) break;
    }
}
//这个要复杂一点
var arr1=[1,5,8,2,3,2,4,5,6,5,1,7,8,9,5,4,1,2,3,5,5,4,1,9,7,8,8,9,5,4,2,3,6,7,8,4,2,5];
var arr2=[];
for(var i=0;i<arr1.length;i++){
			var isAdd = true;//开关
			for(var j=0;j<arr2.length;j++){
				if(arr1[i]==arr2[j]){
					isAdd=false;
					break;
				}
			}
			if(isAdd){
				arr2[arr2.length]=arr1[i];
			}
		}
2.选择排序

(Selection sort)

var arr=[2,5,1,7,18,1,2,9,5,3,12,11,2,13];
for(var i=0;i<arr.length-1;i++){
    var min=i;
    for(var j = i+1;j<arr.length;j++){
        if(arr[min]<arr[j]) min=j;
    }
    if(min==j) continue;
    var temp=arr[i];
    arr[i]=arr[min];
    arr[min]=temp;
    //可以解构
}
3.快速排序

(Quick sort)

var arr=[2,5,1,7,18,1,2,9,5,3,12,11,2,9,13];
function quickSort(arr){
    if(arr.length<=0) return arr;
    var n=~~(arr.length/2);
    var current=arr[n];
    var left=[],right=[];
    for(var i=0;i<arr.length;i++){
        if(i===n) continue;
        if(arr[i]<=current) left.push(arr[i])
        else right.push(arr[i]);
    } 
    return quickSort(left).concat(current,quickSort(right));
}
4.插入排序
for(i =1;i<arr.length;i++){
    for(var n=i;n>=0;n--){
       if(arr[n]>arr[n+1]){
           var temp=arr[n];
           arr[n]=arr[n+1];
           arr[n+1]=temp;
       }
    }
}
5.希尔排序
for(var step=~~((arr.length)/2);step>0;step=~~((step)/2)){
    for( var i=step;i<arr.length;i++){
        for(var j=1-step;j>=0 && arr[j]>arr[step+j];j-=step){
            var temp=arr[j];
            arr[j]=arr[step+j];
            arr[step+j]=temp;
        }
    }
}

  
6.计数排序
var arr = [ 1, 3, 2, 1, 2, 3, 2, 1, 2, 3, 4, 5, 10, 3, 2, 1 ]
    console.log('原始数组 : ', arr)
    // 1. 对 arr 数组进行统计操作
    var countArr = []
    // 1-1. 遍历原始数组
    for (var i = 0; i < arr.length; i++) {
      var item = arr[i]
      // 1-2. 开始统计
      countArr[item] ? countArr[item]++ : countArr[item] = 1
    }
    console.log('统计结果 : ', countArr)
    // 2. 根据统计向原始数组内插入
    // 2-1. 清空原始数组
    arr.length = 0
    // 2-2. 遍历统计数组
    for (var j = 0; j < countArr.length; j++) {
      if (!counrArr[j]) continue
      // j 就是每一次要插入的数据
      // countArr[j] 就是每次要插入多少个
      for (var k = 0; k < countArr[j]; k++) {
        arr[arr.length] = j
      }
    }
    console.log('排序之后 : ', arr)
随机乱序
var arr=Array(100).fill(1).map(function(item,i){
    return i+1
}).sort(function(){
    return Math.random()-0.5;
})
//从1-100的随机乱序数组
随机颜色
//16进制
var color=Array(6).fill(1).reduce(function(v,t){
    return v+(~~(Math.random()*16)).toString(16);
},"#");
console.log(color)
//rgb
function rgbColor(){
    let color="rgb(";
    for(var i=0;i<3;i++) color+=~~(Math.random()*256)+",";
    color=color.substring(0,color.length-1)+")"
    return color
}
//rgba
function rgbaColor(alpha){
     alpha = alpha==undefined? (Math.random()*10/10).toFixed(1) : alpha;
     alpha=Number(alpha);
     if(isNaN(alpha)) alpha=1;
     var color = "rgba(";
     for(var i=0;i<3;i++){
         color+=parseInt(Math.random()*256)+",";
     }
     color+= alpha+")";
     return color;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值