前端排序算法

学习目标:

前端js几种排序算法


冒泡排序:

重复地走访过要排序的数列,相邻元素两两对比,交换 时间复杂度是 O(N 2 )

javascript 复制代码
function bubbleSort(arr){
    for(let i=0;i<arr.length-1;i++){
        for(let j=0;j<arr.length-1-i;j++){
            if(arr[j]>arr[j+1]){
                let tmp = arr[j]
                arr[j] = arr[j+1]    
                arr[j+1] = tmp        
            }      
        }    
    }
    return arr
}

快速排序:

从数组中选择任意一个基准,所有比基准小的元素放在基准的左边,比基准大的元素放到基准的右边 时间复杂度为O(n*logn) 数据过大且数据杂乱无章时,则适合采用快速排序

javascript 复制代码
function quickSort(arr){
    const rec = (arr)=>{
        if(arr.length<=1)return arr;
        let left = []; 
        let right = [];  
        let mid = arr[0];
        for(let i=1; i<arr.length; i++){
            if(arr[i]<mid){
                left.push(arr[i])            
            }else{
                right.push(arr[i])            
            }        
        }
        return [...rec(left),mid,...rec(right)]   
    }
    return rec(arr)
}

选择排序:

首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置 然后再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾 时间复杂度O(n²)

javascript 复制代码
function selectSort(arr){
    let tmp,minIndex;
    for(let i=0;i<arr.length-1;i++){
        minIndex = i;
        for(let j=i+1;j<arr.length;j++){
            if(arr[j]<arr[minIndex]){
                minIndex = j            
            }        
        } 
        tmp = arr[i]
        arr[i] = arr[minIndex]
        arr[minIndex] = tmp   
    }
    return arr
}

插入排序:

将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据 时间复杂度(O(n)---O(n^2)) 适用于数据量不大,算法稳定性要求高,且数据局部或整体有序的数列排序

javascript 复制代码
function insertSort(arr){
  let preIndex,current;
  for(let i=1;i<arr.length;i++){
    preIndex = i-1;
    current= arr[i];
    while(preIndex>=0&&arr[preIndex]>current){
      arr[preIndex+1]=arr[preIndex]
      preIndex--;
    }
    arr[preIndex+1] = current
  }
  return arr
}

归并排序:

含有n个记录的无序表,进行两两合并,变为n/2个长度为2或者1的有序表。不断进行两两合并,直到得到一个长度为 n 的有序表为止。 时间复杂度为nlogn

javascript 复制代码
function mergeSort(arr){
if(arr.length<2) return arr;
    let mid = Math.floor(arr.length/2)
    let left = arr.slice(0,mid)
    let right = arr.slice(mid)
    return merge(mergeSort(left),mergeSort(right))
}
function merge(left,right){
    const result = []
    while(left.length&&right.length){
        if(left[0]<=right[0]){
            result.push(left.shift())
        }else{
            result.push(right.shift())
        }
    }
    while(left.length){
        result.push(left.shift())
    }
    while(right.length){
        result.push(right.shift())
    }
    return result
}

相关推荐
SEO_juper22 分钟前
新独立站冷启动收录全攻略:配置、推送、抓取配额优化完整手册
前端·谷歌·seo·跨境电商·外贸·geo·独立站
TinssonTai27 分钟前
这个 VS Code 插件让我的 AI Coding 又快又稳 - 旧瓶装新酒
前端·人工智能·程序员
体验家27 分钟前
体验家 XMPlus 网页端问卷 SDK 技术解析:用几行 JavaScript 实现精准场景触发与防打扰机制
开发语言·前端·javascript
code_pgf28 分钟前
改进模型架构来减少MLLMs中的幻觉现象
人工智能·深度学习·算法
2301_7644413335 分钟前
基于AI的本地文件归档智能管理工具梳理
人工智能·python·算法·目标检测·交互
无限码力42 分钟前
美团研发岗 4月18号笔试真题 - 包包的最长公共子序列3
算法·美团笔试题·美团研发岗笔试题·美团机试题
Maimai1080842 分钟前
Web3 前端交易系统如何落地:从下单 UI 到 Operation 编码、签名与实时状态更新
前端·react.js·ui·架构·前端框架·web3
kidding7231 小时前
高效备忘清单工具类小程序
前端·计算机网络·微信小程序·小程序
阿里matlab建模师1 小时前
基于matlab时域频域处理的语音信号变声处理系统设计与算法原理(论文+程序源码+GUI图形用户界面)——变声算法
算法·matlab·语音识别
IMPYLH1 小时前
HTML 的 <abbr> 元素
前端·算法·html