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

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

泡泡排序作業(yè)

泡泡排序作業(yè)

慕慕森 2019-10-08 15:48:28
在課堂上,我們正在做排序算法,盡管我在談論它們并編寫偽代碼時理解得很好,但是在為它們編寫實際代碼時遇到了問題。這是我在Python中的嘗試:mylist = [12, 5, 13, 8, 9, 65]def bubble(badList):    length = len(badList) - 1    unsorted = True    while unsorted:        for element in range(0,length):            unsorted = False            if badList[element] > badList[element + 1]:                hold = badList[element + 1]                badList[element + 1] = badList[element]                badList[element] = hold                print badList            else:                unsorted = Trueprint bubble(mylist)現(xiàn)在,(據(jù)我所知)該排序正確,但是一旦完成,它就會無限循環(huán)。如何修復此代碼,以便函數(shù)正確完成并正確排序任何(合理)大小的列表?PS:我知道我實際上不應該在函數(shù)中具有打印功能,而應該返回值,但是我還沒有這樣做,因為我的代碼還沒有真正起作用。
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

為了解釋為什么您的腳本現(xiàn)在無法正常工作,我將變量重命名unsorted為sorted。


首先,您的列表尚未排序。當然,我們設置sorted為False。


一旦開始while循環(huán),我們就假定該列表已經排序。想法是這樣的:一旦找到兩個順序不正確的元素,我們就sorted回到False。只有沒有順序錯誤的元素sorted才會保留。True


sorted = False  # We haven't started sorting yet


while not sorted:

    sorted = True  # Assume the list is now sorted

    for element in range(0, length):

        if badList[element] > badList[element + 1]:

            sorted = False  # We found two elements in the wrong order

            hold = badList[element + 1]

            badList[element + 1] = badList[element]

            badList[element] = hold

    # We went through the whole list. At this point, if there were no elements

    # in the wrong order, sorted is still True. Otherwise, it's false, and the

    # while loop executes again.

還有一些小問題,可以幫助提高代碼的效率或可讀性。


在for循環(huán)中,使用變量element。從技術上講,element不是元素;它是代表列表索引的數(shù)字。而且,它很長。在這些情況下,只需使用臨時變量名即可,例如i“ index”。


for i in range(0, length):

該range命令還可以僅接受一個參數(shù)(名為stop)。在這種情況下,您將獲得從0到該參數(shù)的所有整數(shù)的列表。


for i in range(length):

《Python樣式指南》建議使用下劃線將變量命名為小寫。對于這樣的小腳本,這是一個很小的缺點。它會讓您習慣于Python代碼最常類似于的東西。


def bubble(bad_list):

要交換兩個變量的值,請將它們寫為元組分配。右側被評估為元組(例如(badList[i+1], badList[i])is (3, 5)),然后被分配給左側的兩個變量((badList[i], badList[i+1]))。


bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]

放在一起,你會得到:


my_list = [12, 5, 13, 8, 9, 65]


def bubble(bad_list):

    length = len(bad_list) - 1

    sorted = False


    while not sorted:

        sorted = True

        for i in range(length):

            if bad_list[i] > bad_list[i+1]:

                sorted = False

                bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]


bubble(my_list)

print my_list

(順便說一句,我也刪除了您的打印聲明。)


查看完整回答
反對 回復 2019-10-08
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

氣泡分類的目的是在每輪底部移動較重的物品,同時向上移動較輕的物品。在內部循環(huán)中,您可以在其中比較元素,而不必每次都迭代整個列表。將最重的已經放在最后。該交換變量是一個額外的檢查,所以我們可以標記列表現(xiàn)在可以正確排序,并避免不必要的計算仍在繼續(xù)。


def bubble(badList):

    length = len(badList)

    for i in range(0,length):

        swapped = False

        for element in range(0, length-i-1):

            if badList[element] > badList[element + 1]:

                hold = badList[element + 1]

                badList[element + 1] = badList[element]

                badList[element] = hold

                swapped = True

        if not swapped: break


    return badList

您的版本1已更正:


def bubble(badList):

    length = len(badList) - 1

    unsorted = True

    while unsorted:

        unsorted = False

        for element in range(0,length):

            #unsorted = False

            if badList[element] > badList[element + 1]:

                 hold = badList[element + 1]

                 badList[element + 1] = badList[element]

                 badList[element] = hold

                 unsorted = True

                 #print badList

             #else:

                 #unsorted = True


     return badList


查看完整回答
反對 回復 2019-10-08
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

當您使用負含義的變量名時,您需要反轉它們的值,這就是這種情況。以下內容將更容易理解:


sorted = False

while not sorted:

    ...

另一方面,算法的邏輯有點偏離。您需要檢查在for循環(huán)期間是否交換了兩個元素。這是我的寫法:


def bubble(values):

    length = len(values) - 1

    sorted = False

    while not sorted:

        sorted = True

        for element in range(0,length):

            if values[element] > values[element + 1]:

                 hold = values[element + 1]

                 values[element + 1] = values[element]

                 values[element] = hold

                 sorted = False

    return values


查看完整回答
反對 回復 2019-10-08
  • 3 回答
  • 0 關注
  • 839 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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