1. 程式人生 > >python快速排序的草稿程式碼

python快速排序的草稿程式碼

import sys
sys.setrecursionlimit(10000)
#low=0
#high=4這樣的寫法太low
"""
函式名稱:partition
功能:確定一個基準值,使基準值左邊是小於它的數,右邊是大於等於它的數
返回值:基準值的位置
"""
#a[5]=[1,2,23,1,0]#陣列?元組怎麼用?列表用[],元組用(),這可不是C語言哦
def partition(a,low,high):#需要把low,high的值作為形參傳遞進去嗎
    #for i in range(high):#i是從1到5都取得到嗎?還是0到5,還是0到4,需要i嗎?是0到4都會取到,i和排序次數有什麼聯絡嗎?
        #i in range(5):#這句有必要嗎?這句話的語法是這樣的嗎?下面的語句會縮排嗎,這是一句錯誤的寫法,缺了for
        # 還是用if(low<high)?
    pivot = a[low]
    if (low < high):
        # pivot = a[low]  這裡之前就出過錯誤,在第一躺裡面,pivot是不會變的。 python裡面表示陣列長度的語句是?
        # while(low<high&&pivot<a[high])#這裡需要=嗎?不需要也是說的過去的,就是說a[high]=pivot時,把a[high]放在前面
        # 但是如果下面的while裡面也沒有=,就會出現死迴圈,讓a[low]=a[high]
        while (low < high) and (pivot <= a[high]):  # 不是用&&表示並
            # while (low<high & & a[low] < a[high]):  是要用pivot來比較的
            #  這裡 5是陣列的長度,陣列的長度可以用high表示,不一定非要len,low是0,high是4
            # 第一位與最後一位進行比較,若a[1]>a[0],那麼i++,是用a[i]和a[i+1]進行比較還是用j與pivot比較呢?
            # 如果第二位比第一位大,i++
            high = high - 1  # 而不是high--
            # 如果第二位比第一位小,要把第二位移到第一位之前,是嗎?yes
        # j從最後一位向前移動,有low和high
        # 如何把比pivot小的數放在其前面?
        a[low] = a[high]
        # 接下來與旁邊的數進行比較,如何比較,沒有一定要馬上用第二個數和第一個比較,可以用第一個和第一個比,然後++的方式
        # 跳到第二個
        while (low < high) and (a[low] <= pivot):
            low = low + 1  # 並沒有讓第二個數與pivot比較,while和if的差別在哪?在於如果用了while之後,low++之後還可以讓
            # a[low]與pivot比較
            # 如何把它放在pivot的左邊呢?還有a[low]=pivot的情況,如果a[low]>pivot,把a[low]賦值給a[high]
        a[high] = a[low]  # 這樣第一躺沒有實現以pivot為分界,只比較了兩個數,不會,因為if(len<high),所以會繼續比較
    a[low]=pivot
    #pivot = a[low]#應該是把pivot的值賦給a[low]
    return low

        #忘了還要返回新的值進行下一輪的排序,誤以為for i in range(high):可以將序列排完
#print(partition(0,4))
"""
函式名稱:Quick_sort
function:遞迴使用partition,完成快速排序
return:排好的列表
"""
def Quick_sort(a,low,high):#形參需要加上陣列a嗎?
    #需要幾個pivoter呢?
    if(low<high):#若low=high就沒意義了
        pivoter=partition(a,low,high)
    #如何實現for(i=0;i<high;i++)的功能?
    #到底是使用Quick_sort()還是partition()?看返回值,partition只能返回一個low,所以開始遞迴
        Quick_sort(a,low,pivoter-1)
        Quick_sort(a,pivoter+1,high)#這裡是pivoter+1還是pivoter?
        # 為什麼使用Quick_sort(a,pivoter,high)會出現stack overflow
    #當if的情況不成立時,會return 嗎?
    else:
        return#返回的是什麼
#沒有主函式的話,執行的優先順序是?
a=[1,2,23,1,0]#一般放在後面
Quick_sort(a,0,4)
print(a)#如果不加a進去,函式會不會無法呼叫它
#為什麼結果是none?最後要打印出來的是a

最後的列印結果 G:\python\python.exe G:/python/hu/quick_sort.py [0, 1, 1, 2, 23]