快速排序(python实现)

def quick_sort(alist, start, end):
    """快速排序"""

    # 递归的退出条件
    if start >= end:
        return

    # 设定起始元素为要寻找位置的基准元素
    mid  = alist[start]

    # low 为序列左边的由左向右移动的游标
    low = start

    # high 为序列右边的由右向左移动的游标
    high = end

    while low < high:
        # 如果low与high未重合,high指向的元素不比基准元素小,则high向左移动
        while low < high and alist[high] >= mid:
            high -= 1
        # 将high指向的元素放到low的位置上
        alist[low] = alist[high]

        # 如果low与high未重合,low指向的元素比基准元素小,则low向右移动
        while low < high and alist[low] < mid:
            low += 1
        # 将low指向的元素放到high的位置
        alist[high] = alist[low]

    # 退出循环后,low与high重合,此时所指位置为基准元素的正确位置
    # 将基准元素放到该位置
    alist[low] = mid

    # 对基准元素左边的子序列进行快速排序
    quick_sort(alist, start, low - 1)

    # 对基准元素的右边子序列进行快速排序
    quick_sort(alist, low + 1, end)

原文地址:https://www.cnblogs.com/sometingintheway/p/12038015.html

时间: 2024-10-05 09:45:13

快速排序(python实现)的相关文章

快速排序——Python

快速排序: 在一组数据中选择一个基准值,让后将数据分为两个部分,一部分大于基准,一部分小于基准,然后按此方法将两个部分分组,直到不能再分为止. 需要明白一个概念递归和分而治之的概念. Python实现: 1 # 快速排序 2 3 import random 4 5 def quick_sort(arr): 6 # 边界条件 7 if len(arr) < 2: 8 return arr 9 key = random.choice(arr) # 选择基准 10 left = [i for i in

快速排序 python

说到快速排序,真的花了很大的功夫去看,去理解.排序算法是挺复杂的,理解它就好像是剥洋葱一样,一层一层的.好了,下面说说快排的原理吧. 快速排序就像很多网上的文章一样,是分而治之的,通过递归的方式不断的分而治之.每递归一次就找到当前的标杆值将比这个值大的所有数放到标杆值的右边,小的放到左边,然后再分别对标杆值左边和右边的两个子数组进行同样的函数操作. 快排最最核心的地方就是找到每次标杆值所处的位置.有以下几个步骤: 1. 挑选出一个标杆值key,一般选择数组的第一个值 2. 一个for循环,从第二

快速排序Python实现及其问题解答

1.基本的快速排序算法 1 def quick_sort(arry): 2 return qsort(arry, 0, len(arry)-1) 3 4 5 def qsort(arry, left, right): 6 if left >= right: 7 return arry 8 key = arry[left] 9 lp = left 10 rp = right 11 while lp < rp: 12 while arry[rp] >= key and lp < rp:

快速排序(python版)

#!coding:utf8 def quicksort(list_num, left, right): if left > right: return low = left high = right privot= list_num[left] while low<high: while low < high and list_num[high] > privot: high-=1 if low < high: list_num[low] = list_num[high] w

快速排序python实现

#--×--coding:utf-8-*- def main(): nlist = [] while 1: tmp = raw_input("Please input your element,end by -1") if int(tmp ) == -1: break nlist.append(tmp) InsertSort(nlist) def InsertSort(nlist): nlistSize = len(nlist) for index in xrange(nlistSiz

快速排序-Python实现

1). 算法描述: (1)先从数列中取出一个数作为基准数. (2)分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. (3)再对左右区间重复第二步,直到各区间只有一个数. 2)代码: def sub_sort(list1, low, height): key = list1[low] while low < height: while low < height and list1[height] >= key: height -= 1 while low <

快速排序,归并排序,堆排序python实现

快速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是稳定的排序 堆排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是不稳定的排序 1.快速排序 快速排序的介绍以及C语言实现在这里:快速排序C语言实现 本文介绍的是快速排序python实现: de

排序算法分析【六】:快速排序(附Python&amp;C++代码)

快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较. 算法原理 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 步骤为: 从数列中挑出一个元素,称为 "基准"(pivot), 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边).在这个分区退出之后,该基准就处于数列的

快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)

冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止.上述过程称为第一趟冒泡排序,接着第二趟对前面n-1个关键字进行同样操作,…… 快速排序是对冒泡排序的一种改进,通过一趟排序将记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,可分别对这两部分记录以递归的方法继续进行排序,以达到整个序列有序. 单趟Partition()函数过程请看

JavaScript 、Python Java、Go算法系列之【快速排序】篇

常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.通俗来说就是你们中间谁最小谁就出列,站到队列的最后边,然后继续对着剩余的无序数组说你们中间谁最小谁就出列,站到队列的最后边,一直到最后一个,继续站到最后边,这样数组就有了顺序,从小到大. 1.算法步骤 a.首先在未