【Javascript】数据结构与算法-快速排序第一趟结果

本文介绍了快速排序的基本思想及其实现过程,并通过两个具体案例展示了快速排序的第一趟排序结果。此外,还提供了使用JavaScript实现快速排序的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Javascript】数据结构与算法-快速排序第一趟结果

整体思想

将待排序数组A以某一元素为基准划分为两个子数组left和right,如果基准元素为pivot那么left中的元素都要小于等于pivot并且在左边,right中的元素都要大于等于pivot并且都要在右边,完成划分后对left和right两个子数组继续递归调用快速排序,直到划分的子数组小于两个函数,递归函数直接返回

案例一

已知数组[46,79,56,38,40,84]求第一次快速排序后的结果

思路: 以计算机考研数据结构真题标准解法讲解,该解法选自《数据结构题解》

在这里插入图片描述
以46为基准,左右两个指针同时扫描,right向左移动,遇到小于46交换,遇到40变换
[40,79,56,38,40,84],此时left向右移动遇到79>46,赋值给right,即[40,79,56,38,79,84],right向左移动38<46,变换[40,38,56,38,79,84],left向右移,56>46变换为[40,38,56,56,79,84],right向左移动与left重叠则在重叠部分赋值46,最终第一次遍历结果为[40,38,46,56,79,84]

因此答案选择为C
在这里插入图片描述

案例二

给定一个数组[56,34,58,26,79,52,64,37,28,84,57]求第一趟快速排序
选择基准为56,两个指针,先从右指针开始往左边遍历,28<56,则[28,34,58,26,79,52,64,37,28,84,57],左指针向右遍历58>56,则[28,34,58,26,79,52,64,37,58,84,57]右指针开始往左边遍历37<56,[28,34,37,26,79,52,64,37,58,84,57]左指针向右遍历79>56,[28,34,37,26,79,52,64,79,58,84,57]右指针开始往左边遍历52<56,
[28,34,37,26,52,52,64,79,58,84,57]左指针向右遍历,与右指针重合,赋值56最终快速排序第一趟的结果为
[28,34,37,26,52,56,64,79,58,84,57]

快速排序代码实现(js)

var sortArray = function(nums) {
    if (nums.length <= 1) { return nums; }                  
    var pivotIndex = Math.floor(nums.length / 2);           
    var pivot = nums.splice(pivotIndex, 1)[0];               
    var left = [];                                          
    var right = [];                                         
    for (var i = 0; i < nums.length; i++){                   
        if (nums[i] < pivot) {
            left.push(nums[i]);                             
        } else {
            right.push(nums[i]);                             
        }
    }
    return sortArray(left).concat([pivot], sortArray(right));  
};

复杂度分析

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值