Python实现快速排序

"""
快速排序的思路:
numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
1、设keys(又称为监视哨)等于numlist=[0],i等于0j等于len(numlist)-1,即如下:
   numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
              |                                     |
        keys=6i=0                                 j
2(1)、第一次排序的第一趟是拿numlis[j] keys 比较,如果numlist[j]<keys,则把numlist[j]
   赋给numlist[i],如果numlist[j]>keys,则j向前移一位,:j -= 1,在例子numlist中,第一次比较
   因为keys=6,numlist[j]=6,所以j -= 1,如下所示:
    numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
              |                                  |
        keys=6i=0                              j
    然后继续拿numlist[j]keys相比,因为numlist[j]=15 > keys,所以 j -= 1j的位置如下:
      numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
                 |                              |
             keys=6i=0                        j
    此时因为numlist[j]=2 < keys , 便进行 赋值 : numlist[i] = numlist[j],完成第一次趟排序,
    完成第一次趟排序后,numlisti,j的位置如下:
     numlist = [2, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
                |                                  |
               i=0                                 j
    (2)、第一次排序的第二趟是拿前面开始往后搜索,如果比keys大,则赋值给numlist[j],因为此时
         numlist[i]=2<keys,所以i向后移一位, i += 1,此时i的位置如下:
         numlist = [2, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
                       |                           |
                      i=0                          j
        因为此时的numlist[i]=8>keys,所以进行 numlist[j]=numlist[i]运算,然后再进行
        numlist[i] = keys 的运算,经过第二趟排序后,numlist如下:
        numlist = [2, 6, 1, 4, 3, 9, 5, 4, 11, 2, 8, 15, 6]
                      |                           |
                    i=0                          j
3、继续重复2的步骤,直到i>=j,跳出第一次排序,并且返回i的值,经过第一次排序后的numlist如下:
   numlist = [2, 2, 1, 4, 3, 4, 5, 6, 11, 9, 8, 15, 6]

4、然后进行递归,直到排序完成
"""
def quicky_sort(datalist,left,right):
    keys = datalist[left]
    i = left
    j = right
    while i<j:
        while i<j and datalist[j]>=keys:
            j -= 1
        datalist[i] = datalist[j]

        while i<j and datalist[i]<=keys:
            i += 1
        datalist[j]=datalist[i]
        datalist[i]=keys
    return i

def tempquick(datalist1,left,right):
    if left<right:
        p = quicky_sort(datalist1,left,right)
        #进行递归
        tempquick(datalist1,left,p-1)
        tempquick(datalist1,p+1,right)
    return datalist1

numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
print(tempquick(numlist,0,len(numlist)-1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值