关于算法这个东西 除了冒泡排序 平常也就没其他的接触了 虽然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]