python 冒泡排序與快速排序 遇到的錯誤與問題

來源:互聯網
上載者:User

標籤:for   print   start   最大   深度   系統   python   第一個   快速排序   

今天看了兄弟連php裡面的冒泡排序與快速排序,想了下應該可以用python實現。

冒泡排序函數:

def mysort(x):    len1 = len(x)    for i in range(len1-1,0,-1):        for j in range(0,i):            if x[j]>x[j+1]:                x[j],x[j+1]=x[j+1],x[j]    return x

第三行代碼,是讓i的值9到1,因為冒泡排序是大的數往後冒,當第二次迴圈時,最大的數已經在最後了,所以不需要在比較一次。

同理,第三次,只要讓其比較到len1-2 ,第四次,比較到len1-1。

這樣迴圈次數可以減少一半。

python支援直接交換列表值,這點也比較方便。

 

快速排序函數:

def qsort(x):
if (x == []) :
return []
len1 = len(x)
left = []
right = []
key = x[0]
for i in range(1,len1):
if(x[i]<=key):
left.append(x[i])
else:
right.append(x[i])
left = qsort(left)
right = qsort(right)
return left + [key] + right

快速排序的先有一個比較值key,這裡取列表中的第一個值。讓列表中的其他值與其比較。

如果小於它就放在right列表中,

如果大於它就放在left列表中。

然後遞迴。(對遞迴也不是很理解。只知道函數本身自己調用自己。)

最後將left、比較值key(需要轉換成清單類型)、right串連在一起即可。

出現了一個錯誤:

RuntimeError: maximum recursion depth exceeded while calling a Python object

查詢得知:

原來在python裡面,遞迴函式的最大深度是999。超過這個深度就會報錯。

我們只要在代碼前面加上

import syssys.setrecursionlimit(1000000)

設定成1000000即可解決。

 

最後的代碼以及測試效率:

#!usr/bin/env python#!coding=utf-8__author__ = ‘zhengjim‘import timeimport randomimport syssys.setrecursionlimit(1000000)def mysort(x):    len1 = len(x)    for i in range(len1-1,0,-1):        for j in range(0,i):            if x[j]>x[j+1]:                x[j],x[j+1]=x[j+1],x[j]    return xdef qsort(x):    if (x == []) :        return []    len1 = len(x)    left = []    right = []    key = x[0]    for i in range(1,len1):        if(x[i]<=key):            left.append(x[i])        else:            right.append(x[i])    left = qsort(left)    right = qsort(right)    return left + [key] + rightif __name__ == ‘__main__‘:    x=[]    for i in range(1000000):        j = random.randint(1,10000)        x.append(j)    start = time.clock()    qsort(x)       # 改變函數,比較效率    end =time.clock()    print ‘%f‘ % (end -start)

 

定義了一個1000000的亂序列表。

實驗結果:

# 冒泡排序 跑了5分鐘以上
# 快速排序 12.017942
#系統函數 0.428260

python 冒泡排序與快速排序 遇到的錯誤與問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.