【前端手撕题】手写js快速排序,原理+实现代码

本文详细介绍了快速排序算法,包括其基本思想、主要过程和实现方法。通过选取基准元素,利用左右指针实现元素交换,达到快速排序的效果。文章还提供了JS源码实现,帮助读者更好地理解和应用快速排序。
摘要由CSDN通过智能技术生成

一、快速排序算法简介

1.1 什么是快速排序算法

快速排序(Quicksort),又叫分区交换排序(partition-exchange sort),简称快排,一种排序算法,最早由Charles Antony Richard Hoare提出。在平均状况下,排序n个项目要O(nlogn)次比较,最坏情况下是O(n^2)次比较,但这种情况不多见。事实上,快排的效率通常比其他排序算法要快,因为它的内部循环(inner loop)可以在大部分的架构上有很高的效率。—— 维基百科

1.2 快排主要过程

快排的全过程就是一次次的基本排序组合起来的,每次基本排序后可以确定一个元素的准确位置(该元素左边的数都比他小,右边的数不小于该元素)。所以快排的思想是分治法,把大规模问题分解,再逐一解决。
在这里插入图片描述

选中的这个数称为基准(pivot),一般选择数组第一个数或者中间位置的。以上图为例,经过一次基本排序后,比8小的数放在了左边,不小于8的数放在了右边。这样我们就确定了元素8的位置一定是对的,这也是一次基本排序的成果。之后左右两边继续递归基本排序,直至整个数组有序,算法结束。

二、快速排序实现方法

经过以上分析,不难得出,快速排序的核心在于如何实现一次基本排序,事实上,有很多种不同的方法,这也带来了不同的空间复杂度。比较经典的做法是利用左右两个指针进行元素的交换,这也是为什么快速排序又叫分区交换排序。今天,我们带来另一种比较简单暴力的方法,可以快速实现一趟快速排序。

  1. 首先确定基准数,我们这里选择数组中间的数,并把他取出来。(这时候已经将8从数组中删掉,下图为了理解方便,用黑色标注出来)

基准的选择很大程度上影响着算法的效率&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值