入手两个基础排序算法

关于算法这个东西 除了冒泡排序 平常也就没其他的接触了 虽然js自带了sort这个方法 但是还是需要自己去写比较函数 不像php中sort那么方便 而对于基础的排序算法 也就有了一定的需求 那么 就来看看新入手的这两个排序算法吧(这两个感觉简单 于是就学了 可能是相性和我比较符合吧 哈哈)

1.选择排序:在时间复杂度上表现最稳定的排序算法之一,据说不占用额外内存,适合小型数据的排序

var arr=[56,89,46,76989,233,23,44,5,2,789];//length:10
function selectsort(arr){
for(var i=0;i<arr.length-1;i++){
var k=arr[i];//暂存的最小值
var n=i; //暂存的最小值的索引
for (var j=i+1;j<arr.length;j++) {
if(arr[j]<k){
k=arr[j]; //改变最小值
n=j;  //改变最小值对应索引 方便下步赋值对换位置
}

}
//开始赋值交换位置
var temp=arr[i];
arr[i]=arr[n];
arr[n]=temp;

}
return arr;
}
console.log(selectsort(arr));
//(10) [2, 5, 23, 44, 46, 56, 89, 233, 789, 76989]

2.快速排序:听说应用的很广泛

var arr=[56,89,46,76989,233,23,44,5,2,789];//length:10
function quicklysort(arr){
if(arr.length<=1){
return arr;   //判断符合后 结束递归 返回排好的数组
}
else{
var index=Math.floor(arr.length/2); //取出中间值索引
var shu=arr.splice(index,1)[0];  //剔除中间值 并得到
var left=[];  //设置一个空数组 待存储
var right=[]; //设置另一个空数组
 
for(var i=0;i<arr.length;i++){
if(arr[i]<shu){   //如果小于中间对应的值 则加入左边数组
left.push(arr[i]);
}

else{
right.push(arr[i]);//反之 加入右边数组
}

}

return arguments.callee(left).concat(shu,arguments.callee(right));
}
// 讲左右数组及中间值拼接在一起  并调用函数自身 实现递归 多次重复上面步骤 即可正确排序
}
console.log(quicklysort(arr));
//(10) [2, 5, 23, 44, 46, 56, 89, 233, 789, 76989]


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值