[前端算法]排序算法

在js中一般用到sort方法

js 复制代码
arr.sort((a,b)=>{
	return a-b
})

基础排序

冒泡排序

js 复制代码
function bubbleSort(arr) {

    let len = arr.length;

    for (let i = 0; i < len; i++) {

        for(let j=0;j<len-i-1;j++){

            if(arr[j]>arr[j+1]){

               [arr[j],arr[j+1]] = [arr[j+1],arr[j]]

            }

        }

    }

    console.log(arr);

}
js 复制代码
//改进版 最好的时间复杂度 O(n)

function bubbleSort2(arr) {

    let len = arr.length;

    for (let i = 0; i < len; i++) {

        let flag = false;

        for(let j=0;j<len-i-1;j++){

            if(arr[j]>arr[j+1]){

                flag = true;

               [arr[j],arr[j+1]] = [arr[j+1],arr[j]]

            }

        }

        if(!flag){

            break;

        }

    }

    console.log(arr);

}

选择排序

js 复制代码
function selectionSort(arr) {

    let len = arr.length;

    for(let i=0;i<len;i++){

        for(let j=i+1;j<len;j++){

            if(arr[i]>arr[j]){

                [arr[i],arr[j]] = [arr[j],arr[i]]

            }

        }

    }

    console.log(arr);

}

插入排序

插入排序的核心,找到元素在它前面的那个序列中的正确位置

js 复制代码
function insertionSort(arr) {

    let len = arr.length;

    let temp ; //保存当前变量

    for(let i=1;i<len;i++){

        temp = arr[i];

        let j = i;//j来帮助temp找到自己的位置

        while(j>0 && temp < arr[j-1]){

            arr[j] = arr[j-1];

            j--;

        }

        arr[j] = temp;

  

    }

    console.log(arr);

  
  

}

进阶排序算法

分治思想

分解子问题

求解子问题

合并子问题的解

归并排序

js 复制代码
function mergeSort(arr) {

    const len = arr.length;

    if (len < 2) {

        return arr;

    }

    //计算分割点

    const middle = Math.floor(len / 2);

    //分割数组

    const leftArr = mergeSort(arr.slice(0, middle));

    const rightArr = mergeSort(arr.slice(middle, len));

    //合并两个有序数组

    return merge(leftArr, rightArr);

}
//两个有序数组合并

function merge(leftArr, rightArr) {

    let i = 0;

    let j = 0;

    //初始化结果数组

    const res = [];

    // 检查 leftArr 和 rightArr 是否为 undefined

    const len1 = leftArr? leftArr.length : 0;

    const len2 = rightArr? rightArr.length : 0;

    while (i < len1 && j < len2) {

        if (leftArr[i] < rightArr[j]) {

            res.push(leftArr[i]);

            i++;

        } else {

            res.push(rightArr[j]);

            j++;

        }

    }

    //将剩余的数组元素添加到结果数组中

    while (i < len1) {

        res.push(leftArr[i]);

        i++;

    }

    while (j < len2) {

        res.push(rightArr[j]);

        j++;

    }

    return res;

}

快速排序

js 复制代码
//快速排序 o(nlogn)

function quickSort(arr,left=0,right=arr.length-1){

    //定义递归边界,若数组只有一个元素不用排序

    if(arr.length > 1){

        //下一次划分左右数组的索引位置

        const lineIndex = partition(arr,left,right);

        //对左子数组进行快排

        if(left<lineIndex-1){

            quickSort(arr,left,lineIndex-1);

        }

        //对右子数组进行快排

        if(lineIndex<right){

  

            quickSort(arr,lineIndex,right);

        }

    }

  

    return arr;

}
相关推荐
Q741_14735 分钟前
C++ 模拟题 力扣495. 提莫攻击 题解 每日一题
c++·算法·leetcode·模拟
华洛1 小时前
公开一个AI产品的商业逻辑与设计方案——AI带来的涂色卡自由
前端·后端·产品
明远湖之鱼1 小时前
opentype.js 使用与文字渲染
前端·svg·字体
Felven1 小时前
A. Be Positive
算法
小O的算法实验室1 小时前
2026年COR SCI2区,自适应K-means和强化学习RL算法+有效疫苗分配问题,深度解析+性能实测,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
青岛少儿编程-王老师2 小时前
CCF编程能力等级认证GESP—C++7级—20250927
数据结构·c++·算法
90后的晨仔2 小时前
Vue 3 组合式函数(Composables)全面解析:从原理到实战
前端·vue.js
今天头发还在吗2 小时前
【React】动态SVG连接线实现:图片与按钮的可视化映射
前端·javascript·react.js·typescript·前端框架
小刘不知道叫啥2 小时前
React 源码揭秘 | suspense 和 unwind流程
前端·javascript·react.js
szial2 小时前
为什么 React 推荐 “不可变更新”:深入理解 React 的核心设计理念
前端·react.js·前端框架