【算法】快速排序(typescript)2

简介: 快速排序(typescript)2

前言


上次使用的是双边循环法,这次补充一下单边循环法。

双边循环法从数组的两边交替遍历元素,虽然更加直观,但是代码实现相对繁琐。而单边循环法则简单得多,值从数组的一边进行遍历和交换。直接上代码


正文



函数签名不变:


function quick_sort(input: number[], start: number, end: number) {
        if (start >= end) {
            return
        }
        let pivotIndex = partition(input, start, end)
        quick_sort(input, start, pivotIndex - 1)
        quick_sort(input, pivotIndex + 1, end)
    }


不同的是 partition 函数


function partition(input: number[], start: number, end: number): number {
        let pivot = input[start] // 1.
        let mark = start // 2.
        for (let i = start + 1; i <= end; i++) { // 3. A.
            if (input[i] < pivot) {// 4. 每次是正在移动的元素(input[i]),与基准元素比较的值(pivot)
                mark++ // 5.
                [input[i], input[mark]] = [input[mark], input[i]] // 6.
            }
        }
        input[start] = input[mark] // 7.
        input[mark] = pivot
        return mark
    }


  1. 设定基准元素时最左边的元素
  2. 设定最后要与基准元素交换的元素的下标是最左边元素的下边
  3. 这里只列出说明:因为选的是最左边元素,比较的话也是和基准元素自身比较,所以此处是start + 1,第一次比较就不需要了
  4. 这里要划重点:每次是正在移动的元素(input[i]) -> i,与基准元素比较的值(pivot)-> pivot,切记这里的下标和比较对象很容易出错
  5. 当当前元素的值比基准元素小的时候,最后要与基准元素交换的元素下标右移
  6. 当当前元素的值比基准元素小的时候,最后要与基准元素交换的元素的值与当前元素交换
  7. 最后要与基准元素交换的元素与基准元素交换值
    A.这里强调一下:“=start+1”是起点,“<=end”是重点,注意边界。A.[2021-08-19 补充~]
    继续核对结果


let input = [2, 4, 2, 4, 4, 32, 5, 3, 5, 53, 5, 53, 3, 5, 5, 53,]
    console.log("start -> ", input.toString())
    quick_sort(input, 0, input.length - 1)
    console.log("end -> ", input.toString())

3.webp.jpg

核对结果

目录
相关文章
|
12月前
|
算法 搜索推荐
快速排序-数据结构与算法
快速排序(Quick Sort)是一种基于分治法的高效排序算法。其核心思想是通过选择基准(pivot),将数组划分为左右两部分,使得左侧元素均小于基准,右侧元素均大于基准,然后递归地对左右两部分进行排序。时间复杂度平均为 O(n log n),最坏情况下为 O(n²)(如数组已有序)。空间复杂度为 O(1),属于原地排序,但稳定性不佳。 实现步骤包括编写 `partition` 核心逻辑、递归调用的 `quickSort` 和辅助函数 `swap`。优化方法有随机化基准和三数取中法,以减少最坏情况的发生。
727 13
|
存储 搜索推荐 Python
用 Python 实现快速排序算法。
快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
384 61
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
706 4
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
580 1
|
搜索推荐
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
343 1
|
存储 搜索推荐 算法
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
244 0
|
搜索推荐 Java Go
深入了解快速排序算法
深入了解快速排序算法
468 2
|
搜索推荐 C语言 C++
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
172 0
|
算法 搜索推荐
算法设计 (分治法应用实验报告)基于分治法的合并排序、快速排序、最近对问题
这篇文章是关于分治法应用的实验报告,详细介绍了如何利用分治法实现合并排序和快速排序算法,并探讨了使用分治法解决二维平面上的最近对问题的方法,包括伪代码、源代码实现及时间效率分析,并附有运行结果和小结。

热门文章

最新文章