您的位置:首页 > Web前端 > JavaScript

JavaScript_基本排序算法

2020-08-25 10:01 459 查看

牛客网编程初学者入门训练题解JavaScript版本

JavaScript_基本排序算法

1.冒泡排序

时间换空间 空间复杂度是o(1) 时间复杂度是o(n^2)
最坏n2,最好n,平均n2,稳定排序算法,比较简单
使用范围:n比较小的时候
缺点:复杂度过大

function bubble(arr){
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]]= [arr[j+1],arr[j]]
}
}
}
return arr
}

2.选择排序

最好O(n) 最坏O(n^2) 平均o(n^2)空间O(1) 不稳定
使用范围数据n少的时候,占内存少
不稳定,复杂度高

function select(arr){
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
[arr[i],arr[j]]= [arr[j],arr[i]]
}
}
}
return arr;
}

3.快速排序

空间负复杂度o(logn) 时间复杂度o(nlogn)
最坏是n^2,最好nlogn,平均nlogn,不稳定排序算法,复杂
使用范围:n大的时候效率高
缺点:n越大容易占内存,不稳定

function quick(arr){
if(arr.length==0) return [];
var left = []
var right = []
var base = arr[0]
for(var i=1;i<arr.length;i++){
if(arr[i]<base){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quick(left).concat(base,quick(right))
}

4.归并排序 空间复杂度o(n)

最坏,最好,平均都是nlogn ,稳定排序算法
优点:n大时好,效率高且稳定的排序算法。
缺点:归并比较占用内存,内存随n的增大而增大,

function merge(arr){
if(arr.length<=1) return arr;
var mid=Math.floor(arr.length/2);
// 递归调用自身,拆分的数组都是排好序的,最后传入merge合并处理
return mergeSort(merge(arr.slice(0,mid)),merge(arr.slice(mid)));
}
// 将两个排好序的数组合并成一个顺序数组
function mergeSort(left,right){
var res=[];
while(left.length>0 && right.length>0){
// 不断比较left和right数组的第一项,小的取出存入res
if(left[0]<right[0]){
res.push(left.shift())
}else{
res.push(right.shift())
}
}
return res.concat(left,right);
}

5.js内置排序sort()

arr.sort(function(a,b){return a-b});
//a-b是升序排列
//函数返回值小于0认为是第一个元素小于第二个元素,等于0是两个元素相等,大于0是第一个元素大于第二个元素,则交换两个元素

//b-a是降序排列
//函数返回值大于0认为是第一个元素小于第二个元素,等于0是两个元素相等,大于0是第一个元素小于第二个元素,则交换两个元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: