簡體   English   中英

我如何使用合並排序來排序高分?

[英]How do I use merge sort to sort high scores out?

def sort(data):

    if len(data) > 1:
        midpoint = int(len(data) / 2)
    left, right = sort(data[:midpoint]), sort(data[midpoint:])
    
    sort(left, right)

def sort(left, right):

    result = []
    left_pointer = right_pointer = 0
    
    while left_pointer < len(left) and right_pointer < len(right):
        result.append(left[left_pointer])
        left_pointer += 1
    
    else:
    
        result.append(right[right_pointer])
        right_pointer += 1
    
    result.extend(left[left_pointer:])
    result.extend(right[right_pointer:])
    
    return result

sort([3, 1, 2])

我需要做的任務是以下“游戲的下一個問題是高分表:它沒有排序。這需要修復。因此,這個任務是將您選擇的排序算法實現到 task2_sort.py . 我們將根據您實現的算法的復雜程度給予分數。因此,實現歸並排序將比冒泡排序獲得更多的分數,但是您可以自由地實現通常更快的算法,例如快速排序。

高分由以下形式的列表組成:[[score1, name1], [score2, name2], ... ],其中 score 是您需要排序的值,name 是一個字符串。 訪問數據類似於索引列表,但是您需要通過索引子列表的第零個元素來訪問每個元素的分數。

例如,訪問數據的第一個元素是data[0][0],數據的第二個元素是data[1][0]。 該任務說明了我還需要做什么才能使它正常工作 iv 一直在網上尋找多年,但它只顯示了如何在另一個文件中執行此操作”

游戲啟動,但當你玩完游戲時,游戲崩潰 這是錯誤“第 55 行,添加 self.score_data = sort(self.score_data) TypeError:sort() 缺少 1 個必需的位置參數:'right'”

如果您定義了一個變量,然后給它一個新值,那么舊值就會消失(或者至少您無法訪問)。

x = 5
x = 3
print(x)

3個

函數也是如此。 函數是對象,“sort”這個名字只能指代其中之一。

def sort(data):
    print ('sort was called with one argument')
    data.sort()


def sort(left, right):
    print ('sort was called with two arguments')
    return left + right


data = [5, 1, 3, 4, 2]
sort(data)
print(data)

builtins.TypeError: sort() 缺少 1 個必需的位置參數:'right'

如果我們看上面,我們會看到 python 是正確的。 您將排序定義為左右取兩個 arguments。 另一種類型不再可用,因為它的名稱已被重復使用。

通常 mergesort 會使用一個名為“merge”的助手 function,但你稱它為“sort”,因此無法訪問以前稱為“sort”的 function

我懷疑您期望 c++ 多態性,但那不是 python。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM