第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在python中將快速排序隨機(jī)化,遞歸問題

在python中將快速排序隨機(jī)化,遞歸問題

慕慕森 2021-03-30 13:11:24
我正在實施隨機(jī)快速排序?,F(xiàn)在,我已經(jīng)創(chuàng)建了一個函數(shù)ChoosePivot(A,N)。這將返回隨機(jī)樞軸及其在輸入數(shù)組中的位置。然后,我用數(shù)組中的第一個元素切換該隨機(jī)樞軸,以便樞軸輸入Partition (A,l,r)始終是第一個元素。For NowChoosePivot(A,N)也返回數(shù)組的第一個元素,但我打算稍后對其進(jìn)行修改。以下是我的代碼:def QuickSort(A,N):    if (N == 1):        return    pivot, pivot_pos = ChoosePivot(A,N)    l = 0    r = len(A)    # Preprocessing, swapping pivot position with first element so that first element remains pivot always    temp = A[0]    A[0] = A[pivot_pos]    A[pivot_pos] = temp    A, i= Partition(A,l,r)    print A,i    # If i-1 == 0 this means that there is no left subarray    if (i-1 != 0):        print "Unsorted array"        print A[0:i-1]        QuickSort(A[0:i-1],i-1)        print "Left call"        print A    if (N-i !=0):         print "Unsorted array"        print A[i:N]        QuickSort (A[i:N], N-i)        print "Right call"        print A以下是我的 Partition(A,l,r)def Partition(A,l,r):    # Now first element is the pivot    i= l + 1    pivot = A[l]    for j in range(l+1, r):        if (A[j] < pivot):            #swap (A[j], A[i])            temp_1 = A[i]            A[i] = A[j]            A[j] = temp_1            i = i+1    #swap (A[i-1], A[l])    temp_2 = A[i-1]    A[i-1] = A[l]    A[l] = temp_2    return A, i ChoosePivot(A,N) 現(xiàn)在只需返回數(shù)組中的第一個元素def ChoosePivot(A, N):    #print A    return A[0], 0我使用的輸入數(shù)組如下:Test_in = [3,8,2,5,1,4,7,6]print Test_inQuickSort(Test_in, len(Test_in))print Test_in 請注意,我可以看到代碼在遞歸的低端運(yùn)行。我用筆和紙進(jìn)行了空運(yùn)行代碼,通過打印語句可以看到它確實對子數(shù)組進(jìn)行了排序,但是當(dāng)數(shù)組最終返回時,它并沒有改變。我認(rèn)為它與值與引用調(diào)用有關(guān),但是我發(fā)現(xiàn)python是通過引用調(diào)用的。因此,那里應(yīng)該沒有任何問題。還要發(fā)布輸出,并指出錯誤的確切位置。
查看完整描述

1 回答

?
千萬里不及你

TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊

我發(fā)現(xiàn)了錯誤。問題是當(dāng)我QuickSort再次調(diào)用時,我將原始列表切成薄片并將其作為參數(shù)傳遞。切片列表時,python創(chuàng)建一個新列表,并將切片列表復(fù)制到具有相同名稱的新列表中。所有更改都發(fā)生在遞歸內(nèi)的新列表中,因此不會反映到頂部。作為解決方案,我傳遞了整個數(shù)組,并將列表索引作為參數(shù)傳遞給了數(shù)組。

還有另一個錯誤。調(diào)用之前的狀況QuickSorti-1!=0N-i!=0不正確的,因為支點可以在陣列中的任何指標(biāo)。我為左右子數(shù)組創(chuàng)建了單獨的左右索引并進(jìn)行了測試left_index < right_index。


查看完整回答
反對 回復(fù) 2021-04-13
  • 1 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號