python 写的快速排序

python 写的快速排序

 

 def paixu(list1):  第一种方法比较简单,就是跟List1的第一个元素座大小的比较,也比较好理解的,

if len(list1)==0:

return list1

else:

a=list1[0]

                b=[ ]

                c=[ ]

                for x in list1[1:]:

if x<a:

c.append(x)

else:

b.append(x)

s=paixu(b)

m=paixu(c)

return m+[a]+s

第二种方法(quick sort)

   他的原理是

這邊所介紹的快速演算如下:

  1. 將最左邊的數設定為軸,並記錄其值為 s

廻圈處理:
  1. 令索引 i 從數列左方往右方找,直到找到大於 s 的數
  2. 令索引 j 從數列右方往左方找,直到找到小於 s 的數
  3. 如果 i >= j,則離開迴圈
  4. 如果 i < j,則交換索引i與j兩處的值
  5. 將左側的軸與 j 進行交換
  6. 對軸左邊進行遞迴
  7. 對軸右邊進行遞迴

透過以下演算法,則軸左邊的值都會小於s,軸右邊的值都會大於s,如此再對軸左右兩邊進行遞迴,就可以對完成排序的目的,例如下面的實例,*表示要交換的數,[]表示軸:
  • [41] 24 76* 11 45 64 21 69 19 36*
  • [41] 24 36 11 45* 64 21 69 19* 76
  • [41] 24 36 11 19 64* 21* 69 45 76
  • [41] 24 36 11 19 21 64 69 45 76
  • 21 24 36 11 19 [41] 64 69 45 76

 


然后代码是这样的:

 

def paixu(list1, m, n): 这里的M的值一般设为0,而n的值的为len(list1)-1,也就是list1这个序列的最大元素位置

    if m < n:     这里是判断,其实m<n是必须的,

        s = list1

-   这里把list1的第一个元素作为判断大小的依据

 

        i = m

        j = n + 1

        while True:

            while i + 1 < len(list1): 

                i += 1

                if list1[i] >= list1

-:                            

 

                    break

            while j - 1 > -1:

                j -  = 1

                if list1[ j ] <= list1

-:

 

                    break

            if i >= j:

                break

            list1[i], list1[ j ]  = list1[ j ] , list1[ i ] 这里是将i<j的元素中的大值换到后边的小值,也就是前边的

        list1

-, list1[ j ] = list1[ j ], list1

-  这里是将第一个元素替换到循环到lsit1[J]的值

 

        realsort(list1, m, j - 1)   将list1

-前边的值再进行替换

 

        realsort(list1, j + 1, n)   将list1

-后便的值进行替换

 

        return list1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值