文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>python 写的快速排序...

python 写的快速排序...

时间:2010-08-17  来源:wwaiym

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

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载