【前端每日一题】day2

用JS写一个快速排序算法

javascript 复制代码
function quickSort(arr) {
    if (arr.length <= 1) {
        return arr;
    }

    const pivot = arr[Math.floor(arr.length / 2)];
    const left = [];
    const right = [];

    for (let i = 0; i < arr.length; i++) {
        if (i === Math.floor(arr.length / 2)) {
            continue; // Skip pivot element
        }
        if (arr[i] < pivot) {
            left.push(arr[i]);
        } else {
            right.push(arr[i]);
        }
    }

    return [...quickSort(left), pivot, ...quickSort(right)];
}

// Example usage:
const array = [5, 3, 7, 2, 9, 1, 6, 4, 8];
const sortedArray = quickSort(array);
console.log(sortedArray);

首先介绍下什么是快速排序,

从待排序数组中选定一个基准值,并将数组分为左右两个子数组

我们这里先选定数组中间的元素为基准值,并创建左右两个空数组用于存放排序完的值
(math.floor()是 JavaScript 中的一个内置函数,用于向下取整。它接受一个数字作为参数,并返回小于或等于该数字的最大整数。)

然后循环数组内的元素,同时跳过基准值,避免重复向数组内加入基准值,将其他元素分别与基准值比较,小的放在left数组,大的放在right数组

然后递归调用快排方法,在左右数组内再次进行快排直到满足条件(子数组长度<=1,即各元素已有序排列)

最后返回排序完成的数组
扩展运算符 ... 用于将数组的元素依次添加到新数组中
... 表示数组字面量,用于创建一个新的数组。

相关推荐
尤小小12 分钟前
Vite-SSG 实践:Vue项目预渲染落地完整方案
前端·vue.js
默_笙18 分钟前
🍕 AI 的嘴巴装了水管(上):从"等它说完"到"边说边听"的流式输出指南
前端·javascript
lichenyang45319 分钟前
让 VK 小程序调用 HarmonyOS 原生能力:壳子 SDK 的实现思路
前端
梨想橙汁29 分钟前
Vue3 组合式 API 深度解析:ref/reactive 响应式,计算属性与侦听器
前端·vue.js
暖焰核心30 分钟前
继承全解——继承、默认成员函数、切片、隐藏与虚继承
java·前端·javascript
by组态36 分钟前
Ricon组态系统API参考手册
前端·后端·物联网
前端逗比逗39 分钟前
AI 前端落地实战:SSE 流式输出、断点续传、打字机渲染
前端·webassembly
晴天161 小时前
前端跨域方案解析:JSONP 的原理、实战与演进
前端·状态模式
web打印社区1 小时前
浏览器静默打印?先别装第三个库了
前端·vue.js·chrome·electron·pdf
艾伦野鸽ggg1 小时前
前端异步请求的状态竞争(请求竞态)问题
前端·javascript·axios