Javascript sort( ) 冒泡排序,选择排序,快速排序,桶排序

sort( ) ,对数组进行正序或者倒序排列,改变原数组

var arr=[1,4,6,2,3,8,7,6,5,3,9,10];
arr.sort();
console.log(arr);//[1,10,2,3,3,4,5,6,6,7,8,9,12]

想让数组按照从小到大,或者从大到小的顺序排列,需要给 sort ( ) 里传入参数

var arr=[1,4,6,2,3,8,7,6,5,3,9,10];
//return a-b,表示从小到大排列
//return b-a,表示从大到小排列
arr.sort(function(a,b){
    return a-b;
})
//return Math.random()-0.5; 表示乱序排列
arr.sort(function(){
	return Math.random()-0.5;
})

冒泡排序

  1. 从后向前循环
  2. 内部从前向后循环到外层变量
  3. 判断前值是否大于后值,如果前值大小后值,则交换位置
function sort(arr){
	var len=arr.length;
	while(len>0){
	    for(var i=0;i<len;i++){
	        if(arr[i]>arr[i+1]){
	            var temp=arr[i];
	            arr[i]=arr[i+1];
	            arr[i+1]=temp;
	        }
	    }
	    len--;
	}
}

选择排序

先找出最小或者最大的索引值,然后用当前的下标的元素与这个最小的元素交换

  1. 遍历数组
  2. 设置最小的索引值为当前的索引值
  3. 从当前的下一项开始遍历到数组的尾部
  4. 判断所有遍历的值中最小的值得索引值
  5. 交换当前值和最小索引值的元素
function sort(arr){
	var minIndex;
	for(var i=0;i<arr.length;i++){
		//假设第一位元素为最小值
	    minIndex=i;
	    for(var j=i+1;j<arr.length;j++){
	    	//判断如果当前元素大于最小值,则minIndex不变,否则把当前元素的下标赋值给变量minIndex
	        minIndex=arr[minIndex]<arr[j] ? minIndex : j;
	    }
	    //交换当前值和minIndex的元素
	    var temp=arr[i];
	    arr[i]=arr[minIndex];
	    arr[minIndex]=temp;
	}
}

快速排序(快排)

  1. 删除数组中间的元素,并且,将这个元素返回一个变量
  2. 创建两个空数组,一个是left,一个是right,遍历这个数组,将小于中间元素的数据存入left,大于中间元素的数据存入right
  3. 将left数组递归与中间元素和right数组递归的结果合并返回
  4. 在函数最顶部,一定要写数组长度小于等于1,返回该数组
var arr = [1,4,2,2,3,10];
function sort(arr){
	//如果数组的长度小于等于1,则停止回调
    if(arr.length<=1) return arr;
    var left=[];
    var right=[];
    //取到数组最中间的值赋值给item,如果数组的长度为单数,则取中间前一位数
    var item=arr.splice(parseInt(arr.length/2),1)[0];
    for(var i=0;i<arr.length;i++){
    	//遍历数组,如果值小于item,则放入left数组中
        if(arr[i]<item) left.push(arr[i]);
        //如果值大小item,则放入right数组中
        else right.push(arr[i]);
    }
    arr=sort(left).concat(item,sort(right));
    return arr;
}
console.log(sort(arr));

桶排序

当对象中的key是数值时,对象会按照数值顺序自动排列好,当key是数值和字符交叉时,优先排序数值。

  1. 将数组中的各项作为对象的key和value;
  2. 当对象中的key是数值时,对象会按照数值顺序自动排列好;
  3. 将原数组中的数据清除;
  4. 再将对象中的value,依次添加到数组中;
let arr=[2,5,7,1,4,3,6,8,0];
let obj={};
arr.forEach(item=>{
	obj[item]=item
});
arr.length=0;
for(let prop in obj){
    arr.push(obj[prop]);
}
console.log(arr);//[0,1,2,3,4,5,6,7,8]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值