【数据结构】快速排序

简介: 【数据结构】快速排序

正文


快速排序的基本思想是:通过一趟排序将待排的记录划分为独立的两部分,称为前半区和后半区,其中,前半区记录的关键字均不大于后半区的关键字,然后再分别对这两部分记录继续进行快速排序,从而使整个序列有序。


一趟快速排序的具体做法:


  1. 附设两个位置指示变量 i 和 j,它们的初始值分别指向序列的第一个记录和最后一个记录。
  2. 设枢轴记录(通常是第一个记录)的关键字为 pivot,则首先从 j 所指位置起向前搜索,找到第一个关键字小于 pivot 的记录时将该记录向前移到 i 指示的位置。
  3. 然后从 i 所指位置起向后搜索,找到第一个关键字大于 pivot 的记录时将该记录向后移动到 j 所指位置。
  4. 重复该过程直至 i 与 j 相等位置。


示例代码:


func TestQuickSort(t *testing.T) {
    input := []int{43, 63, 64, 35, 98, 24, 25, 62, 94, 35}
    quickSort(input, 0, len(input)-1)
    t.Log(input)
}
func quickSort(input []int, start, end int) {
    if start >= end {
        return
    }
    pivotIndex := partition(input, start, end)
    quickSort(input, start, pivotIndex-1)
    quickSort(input, pivotIndex+1, end)
}
func partition(input []int, start, end int) (pivotIndex int) {
    pivot := input[start]
    mark := start
    for k := start + 1; k <= end; k++ {
        if input[k] < pivot {
            mark++
            tmp := input[k]
            input[k] = input[mark]
            input[mark] = tmp
        }
    }
    input[start] = input[mark]
    input[mark] = pivot
    return mark
}


99.webp.jpg

执行结果

目录
相关文章
|
2月前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
24 1
|
2月前
【初阶数据结构】打破递归束缚:掌握非递归版快速排序与归并排序
【初阶数据结构】打破递归束缚:掌握非递归版快速排序与归并排序
|
2月前
|
算法
蓝桥杯宝藏排序 | 数据结构 | 快速排序 归并排序
蓝桥杯宝藏排序 | 数据结构 | 快速排序 归并排序
|
4月前
|
存储 算法 搜索推荐
【初阶数据结构篇】冒泡排序和快速排序(中篇)
与直接插入排序法相比,比较次数一致,但冒泡排序的交换需要执行三次,而直接插入排序因为使用了tmp临时变量存储要插入的数据,只用执行一次,所以直接插入排序法效率明显更高。
35 1
|
5月前
|
搜索推荐
【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】
【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】
【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】
|
6月前
|
算法
数据结构与算法-快速排序
数据结构与算法-快速排序
26 1
|
7月前
|
存储 搜索推荐 算法
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]-玩转八大排序(二)&&冒泡排序&&快速排序
[数据结构]-玩转八大排序(二)&&冒泡排序&&快速排序
|
6月前
|
算法 搜索推荐
数据结构和算法——快速排序(算法概述、选主元、子集划分、小规模数据的处理、算法实现)
数据结构和算法——快速排序(算法概述、选主元、子集划分、小规模数据的处理、算法实现)
44 0
|
6月前
|
搜索推荐
深入理解数据结构第五弹——排序(2)——快速排序
深入理解数据结构第五弹——排序(2)——快速排序
30 0