`

排序算法(六)---快速排序(交换排序)

阅读更多
直接排序属于交换排序

基本思想:
1:选1个基准元素(通常是第一个元素或最后一个元素),将待排数列分成两部分,一部分比基准元素小,一部分比基准元素大
2:再对这两部分数列重复步骤1

时间复杂度:
最好情况:O(n*logn)
最坏情况,退化为冒泡排序 O(n*n)

稳定性:不稳定

python代码实现:quick_sort.py
def swap(l, i, j):
    tmp = l[i]
    l[i] = l[j]
    l[j] = tmp

def partition(l, low, high):
    pivo = l[low]               #基准元素选取
    while(low != high):         #从数列两端交替扫描
        while(low < high and l[high] >= pivo): #从high位置向前搜索,将比基准元素小的交换到低端
            high -= 1
        swap(l, low, high)
        while(low < high and l[low] <= pivo):#从low位置向后搜索,将比基准元素大的交换到高端
            low += 1
        swap(l, low, high)
    return low

def quick_sort(l, low, high):
    if low < high:
        pivokey = partition(l, low, high)
        quick_sort(l, low, pivokey-1)  #递归对低端数列排序
        quick_sort(l, pivokey+1, high) #递归对高端数列排序

if __name__ == '__main__':
    l = [57,12,63,29,37,18,34,46,92,87]
    quick_sort(l, 0, 9)
    print('result:' + str(l))
分享到:
评论

相关推荐

    《数据结构与算法》-李春葆 实验报告-典型排序算法实践-快速排序

    数据结构与算法 - 快速排序算法实现报告 在数据结构与算法的学习过程中,快速排序算法是一种重要的排序算法,它具有排序速度快、就地排序的优点,但也具有不稳定性。以下是快速排序算法的详细实现报告。 快速排序...

    最快的排序算法 计算机最快的算法-史上14个最快速算法:孩子的计算能力爆表!大脑堪比计算机!...,排序算法数据结构

    快速排序算法是一种高效的排序算法,它的工作原理是通过选择一个元素作为pivot,然后将数组分为两个部分,以达到排序的目的。快速排序算法的时间复杂度为O(n log n),因此它适合大规模的数据排序。 5.归并排序算法 ...

    C语言排序算法---冒泡排序法

    在实际应用中,冒泡排序效率较低,时间复杂度为O(n^2),对于大数据量或性能要求高的场景,通常会选择其他更高效的排序算法,如快速排序、归并排序或堆排序等。然而,由于其简单易懂,冒泡排序在教学和理解排序算法...

    VC++多线程实现三种排序算法比较----冒泡排序、快速排序、归并排序

    本篇文章主要探讨了如何在VC++环境中利用多线程技术来实现三种经典的排序算法:冒泡排序、快速排序和归并排序,并对它们的性能进行了比较。 首先,冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次...

    FPGA并行快速排序算法-位宽可设

    快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出。它的基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别...

    算法设计与分析-1排序算法性能分析-冒泡/选择/插入/合并/快速排序-pre ppt

    本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析它们的算法原理、时间效率,并通过经验分析验证理论分析的准确性。 **1. 选择排序(Selection Sort)** 选择排序...

    排序算法--免费

    本文将深入探讨标题和描述中提到的一些基本排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、堆排序、快速排序以及归并排序,并结合C++编程语言进行讲解。 1. **选择排序(Selection Sort)** - 选择排序是一...

    排序算法 -- 插入排序

    在实际应用中,插入排序通常用于小规模数据或者作为其他高级排序算法(如快速排序、归并排序)的基石,特别是在处理部分有序的数据时,它的表现往往优于其他O(n^2)的排序算法。同时,插入排序也可以用于构建更复杂的...

    排序算法图解--Document.zip

    1. 冒泡排序:冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换位置,使最大(或最小)的元素逐渐“浮”到数组的一端。虽然效率较低,但对于小规模数据或部分有序的数据,仍然有其应用价值。 2. 插入排序...

    排序算法 -- 冒泡排序

    冒泡排序是一种基础且经典的排序算法,它的基本思想是通过不断地交换相邻的逆序元素,使得每一轮排序后,最大的元素“浮”到数组的末尾。这个过程就像水底下的气泡逐渐升至水面一样,因此得名“冒泡排序”。 在Java...

    简单排序算法--类的简单使用

    在这个例子中,可能会有一个类`SortAlgorithms`包含各种排序算法的成员函数,如冒泡排序、选择排序、插入排序、快速排序等。另一个类`UserInterface`则负责处理用户交互和控制执行哪种排序算法。 3. **排序算法的...

    七大排序算法--c语言是实现

    交换排序:快速排序quicksort,冒泡排序bubblesort 选择排序:直接选择排序selectionsort,堆排序maxheapsort 插入排序:直接插入排序insertsort,希尔排序shellsort 合并排序:归并排序mergesort

    新的快速排序算法 Dual-Pivot QuickSort阅读笔记

    快速排序是一种常用的排序算法,它的效率在许多情况下非常高。其核心思想是选择一个"枢轴"(pivot)元素,然后将数组分为两部分:一部分包含小于枢轴的元素,另一部分包含大于枢轴的元素。递归地对这两部分继续执行...

    排序算法实现-支持插值排序+选择排序+冒泡排序-sort.zip

    在实际应用中,通常会选择时间复杂度更低的排序算法,如快速排序、归并排序或堆排序,它们在大多数情况下能提供更好的性能。然而,理解这些基础排序算法有助于我们更好地掌握排序的本质,以及如何根据具体需求选择...

    排序算法 -- 选择排序

    在实际应用中,尤其是在处理大量数据时,通常会选用更高效的排序算法,如快速排序、归并排序或堆排序。然而,理解选择排序有助于我们学习和理解其他更复杂的排序算法,因此在学习数据结构和算法时仍然是必不可少的...

    排序算法.doc 详细讲解了插入排序、交换排序、选择排序、归并排序等排序算法的原理以及实现代码

    本文主要探讨四种基本的排序算法:插入排序、交换排序、选择排序和归并排序,这些都是内部排序的主要方法。 1. **插入排序**: - 直接插入排序是最基础的排序算法之一,它的工作原理类似于人们手动整理扑克牌。...

    详解Java常用排序算法-快速排序

    快速排序(Quick Sort)是一种分治思想的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行排序,以达到...

    C的数据结构八种排序算法的-代码及分析.docx

    这六种排序可能包括插入排序、快速排序、归并排序、堆排序、希尔排序以及基数排序等。这些排序算法各有特点,例如: - **插入排序**:将未排序元素依次插入到已排序部分的正确位置,适用于小规模或接近有序的序列。...

    数据结构课程设计各种排序算法比较--附带源代码.doc

    本课程设计旨在深入比较几种常见的排序算法,包括直接插入排序、冒泡排序、选择排序和快速排序,通过附带的源代码进行实践操作,以帮助理解它们的工作原理和性能差异。 1. **直接插入排序**:直接插入排序是一种...

    快速排序-算法报告.doc

    快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出,它采用了分治(Divide and Conquer)策略。快速排序的基本思想是通过一趟排序将待排序的数据分割成两部分,其中一部分的所有数据都比另一部分的所有数据...

Global site tag (gtag.js) - Google Analytics