`

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

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

基本思想:
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))
分享到:
评论

相关推荐

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

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

    数据结构排序算法汇总包-直接插入排序 折半插入排序 2—路插入排序 表插入排序 希尔排序 起泡排序 快速排序 简单选择排序 树形选择排序 堆排序 归并排序链式基数排序

    实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...

    多种排序算法代码(快速排序)

    1.直接插入排序--增量法 2.希尔排序 3.交换排序 4.快速排序 5.直接选择排序 6.堆排序 7.归并排序

    内排序算法比较,六种排序算法分析

    1) 对以下6种常用的内部排序算法进行比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。 2) 待排序记录的文件个数不小于1000( 其数据用伪随机数产生),至少用5组不同的输入数据作比较;比较...

    快速排序算法C语言程序.zip

    快速排序算法C语言程序,快速排序算法和冒泡排序法类似,都是基于交换排序思想,但是快速排序算法对冒泡排序算法进行改进,从而使其具有更高的执行效率。

    7种常用排序算法实现(C++)(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序以及快速排序)

    本文件是7种常用排序算法的实现(C++),包括冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序以及快速排序。代码详细有注释且有测试用例。

    Java实现常用排序算法

    实现了四类排序算法,插入排序、交换排序、选择排序、归并排序,详情请看文档,其中 树形选择排序算法--选择排序、 堆排序--选择排序 这两种算法还没实现,有兴趣的自行解决

    经典排序算法,有选择排序,冒泡排序,交换排序,谢尔排序,插入排序基数排序

    经典排序算法,有选择排序,冒泡排序,交换排序,谢尔排序,插入排序基数排序

    快速、冒泡排序算法比较

    试通过随机数据比较快速排序、起泡排序各算法的关键字比较次数和关键字移动次数。 (1)待排序表的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字...

    排序算法包

    利用C++实现了常用的排序算法,包括:冒泡排序、插入排序、选择排序、归并排序、快速排序、0-交换排序。利用简单的数字序列排序为例,希望能帮助对以上算法有更深理解。

    内部排序算法比较 数据结构课程设计

    1、本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 2、待排序表的表的元素的关键字为整数,表长不小于100;其中的数据要用伪随机数产生...

    8大排序算法

    程序员可以参考的8大排序算法。1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序)

    排序算法演示大全

    快速排序 取其中一个值,把小于此值的放到其左边,大于此值的放到其右边 如此递归 直接插入排序 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序...

    数据结构 排序算法的比较

    内部排序算法主要分为5 大类,有十二个算法。插入排序类、交换排序类、选择排序类、归并排序类和基数排序类。算法主要包括:插入排序、折半插入排序、选择排序、冒泡排序、希尔排序、快速排序、堆排序、归并排序、...

    C#排序算法总结

    C#排序算法总结:交换排序:最基础的冒泡排序,冒泡排序的优化版选择排序和快速排序,插入排序:直接插入排序和折半插入排序。

    数据结构内部排序算法比较.doc

    (1)对以下6种常用的内部排序算法进行比较z起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 (2)待排序表的表长不小于1005其中的数据要用伪随机数产生程序产生:至少要用5组不同的输入数据作比较...

    Java实现快速排序算法(源代码)

    然而,快速排序在最坏情况下(输入序列已经有序或接近有序)的时间复杂度会退化为O(n^2),且由于存在元素的交换操作,它是一种不稳定的排序算法。 在Java实现中,快速排序算法通过quickSort方法接收待排序数组和...

    c语言排序算法的比较

    本程序对6种较为常见的排序算法进行实测比较。他们分别是:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序;2. 待排序表元素的关键字为整型。使用正序、逆序和不同程度的打乱获得不同的数据做...

    数据结构排序算法介绍

    数字排序法:通常来说有五大类方法:插入排序(直接插入排序、希尔排序等)、交换排序(冒泡排序、快速排序)、选择排序(简单选择排序、树形选择排序、堆排序)、归并排序、基数排序

    交换排序\快速排序

    数据结构的快速排序法!是基础的东西,望大家多多支持!

Global site tag (gtag.js) - Google Analytics