首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

排序算法总结(python版)-7

排序算法总结(python版)-7

快速排序(Quick Sort)

快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。
算法描述

    从数列中挑出一个元素,称为 “基准”(pivot);
    重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
    递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

    #快速排序,冒泡的升级
    def QSort(ls, low, high):
        if low > high:
            return
        prvotkey = ls[low]
        low_dup = low
        high_dup = high
        #将选取的 prvotkey 不断交换,将比他小的换到他的左边,比他大的换到他的右边
        while(low < high):
            while low < high and ls[high] >= prvotkey:
                high -= 1
            while low < high and ls[low] <= prvotkey:
                low += 1
            if low < high:
                ls[low], ls[high] = ls[high], ls[low]
        ls[low_dup], ls[low] = ls[low], ls[low_dup]
        QSort(ls, low_dup, low-1)
        QSort(ls, low+1, high_dup)
        return ls
    def QuickSort(ls):
        if not ls:return
        return QSort(ls,0,len(ls)-1)
返回列表