如何通过使用bubblesort排序随机整数列表来增加交换而返回字典?

时间:2019-04-06 01:27:16

标签: python-3.x

我试图在doctest中返回类似的输出,但是当调用函数时,我得到了交换项目的次数以及排序列表。

我尝试为空字典创建变量,并尝试将返回的函数包含在其中,但我不知道该怎么做。

def bubbleSort(numList):

    num_dict = {}

    for j in range(1, len(numList)):

        swap_check = False

        for i in range(len(numList)-1):

            if numList[i] > numList[i + 1]:
                numList[i], numList[i + 1] = numList[i + 1], numList[i]

                swap_check = True

                return numList
        if swap_check == False:
            break
    return j, numList

预期结果:         取得清单并传回2个值         第一个返回值:每次完成冒泡排序之后,具有列表状态的字典         第二个返回值:排序列表

>>> bubbleSort([9,3,5,4,1,67,78])
({1: [3, 5, 4, 1, 9, 67, 78], 2: [3, 4, 1, 5, 9, 67, 78], 3: [3, 1, 4, 5, 9, 67, 78], 4: [1, 3, 4, 5, 9, 67, 78], 5: [1, 3, 4, 5, 9, 67, 78]}, [1, 3, 4, 5, 9, 67, 78])

实际结果:

>>> bubbleSort([9,3,5,4,1,67,78])
(5, [1, 3, 4, 5, 9, 67, 78])

1 个答案:

答案 0 :(得分:1)

因此,您获得(5, [1, 3, 4, 5, 9, 67, 78])作为输出的原因是因为循环j = 5和[1, 3, 4, 5, 9, 67, 78]的最后一次是您的排序列表,这就是您从函数返回的列表。 return j, numList

当您遍历列表时,我们可以使用您的num_dict词典来存储排序算法的结果。

num_dict[j] = num_list[:]

因为我们要对num_list进行突变,所以当我们将排序结果存储在num_dict中时,我会复制列表。 num_list[:]仅返回num_list的副本。

它在完成的功能中:

def bubble_sort(num_list):

    num_dict = {}

    for j in range(1, len(num_list)):
        swap_check = False

        for i in range(len(num_list)-1):
            if num_list[i] > num_list[i + 1]:
                num_list[i], num_list[i + 1] = num_list[i + 1], num_list[i]
                swap_check = True

        # store result of sort iteration
        num_dict[j] = num_list[:]

        if swap_check == False:
            break

    return num_dict, num_list

现在我们在运行bubble_sort函数时得到了这个信息:

>>> bubble_sort([9,3,5,4,1,67,78])
({1: [3, 5, 4, 1, 9, 67, 78],
  2: [3, 4, 1, 5, 9, 67, 78],
  3: [3, 1, 4, 5, 9, 67, 78],
  4: [1, 3, 4, 5, 9, 67, 78],
  5: [1, 3, 4, 5, 9, 67, 78]},
 [1, 3, 4, 5, 9, 67, 78])