选择排序
选择排序,就是在一个无序数组中,一个指针i遍历从前到后所有的数组元素的下标,一个指针j在当前下标后面的位置中找到最应该放到i位置的元素,然后两两交换。
//选择排序
// 在各种情况下复杂度波动小,因此一般是优于冒泡排序 时间复杂度 O(n*n)
var arr = [3,2,5,8,4,7,9,6,1];
function sort(arr1){
var len = arr1.length;
var set;
for(let i=0;i<len-1;i++){
set = i;
for(let j=i+1;j<len;j++){
if(arr1[j]<arr1[set]){
set=j;
}
}
[arr1[i],arr1[set]]=[arr1[set],arr1[i]]
}
return arr1;
}
console.log(sort(arr));
快速排序
快速排序,找一个基准,一般是数组二分之一的位置的元素,小于基准的元素放在基准前面,大于基准的元素放在基准的后面。然后对于前后两个数组分别递归实现找基准然后排序的过程。
//快速排序
//不稳定 在大数据下性能优越
var arr = [3,2,5,8,4,7,9,6,1];
function quicksort(arr1){
if(arr1.length<2){
return arr1;
}
let mid = Math.floor(arr1.length/2);
let p = arr1.splice(mid,1)[0];
let left = [];
let right = [];
for(let i=0;i<arr1.length;i++){
if(arr1[i]<p){
left.push(arr1[i]);
}else{
right.push(arr1[i]);
}
}
return quicksort(left).concat([p],quicksort(right));
}
console.log(quicksort(arr));