经典排序算法-快速排序-python实现

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

快速排序采用分治算法,算法步骤如下:

1.两个指针left,right分别指向列表的第一个元素和最后一个元素,然后取一个参考值,默认为第一个列表的第一个元素(也可以取最后一个),称为Key

2.然后right指向的值先和参考值Key进行比较,若list[right]大于或等于Key,right就一直向左移动,right-1,直到移动到小于Key值的位置

3.left指向的值和参考值Key进行比较,若list[left]小于Key,left就一直向右移动,left+1,直到移动到大于Key位置

4.此时,left和right若还没有相遇,即left还小于right,则二者指向的值互换

5.若已经相遇则说明,第一次排序已经完成,将list[right]与list[0]的值进行互换,进行之后的递归

6.然后针对左右两边序列进行上述步骤,重复直至排序完成

 

博主使用python实现代码如下:

def QiuckSort(s):
    return quicksort(s,0,len(s)-1)

def quicksort(s,left,right):
    if left>=right:
        return s
    key = s[left]
    lep = left
    rip = right
    while lep  <rip:
        while s[rip]>=key and lep  <rip:
            rip -=1
        while s[lep]<=key and lep  <rip :
            lep +=1
        s[lep],s[rip]=s[rip],s[lep]
    s[left],s[rip]=s[rip],s[left]
    print(s)
    quicksort(s,left,lep-1)
    quicksort(s,rip+1,right)
    return s

s=[2,99,7,55,85,24,45,36]
print(s)
QiuckSort(s)
print(s)

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值