python - 插入排序算法python有问题

标签 python algorithm sorting insertion-sort

我正在做一个作业,给我们一个不超过 10^6 个数字的文本文档。可以是正的也可以是负的。然后我们的任务是创建一个函数,该函数使用插入排序算法将列表排序到定义的索引,该索引可能包含也可能不包含整个列表。然后我们需要它来输出排序列表和算法移动项目进行排序的次数(或者它必须迭代多少次才能对整个列表进行排序。

我让它与示例列表一起正常工作,只是对其进行排序,然后输出排序结果。我就是这样做的。

arr = [1,9,6,5,4,3,5,2]
n = 8

def insertionSort(arr, n):
    # Traverse through 1 to len(arr)
    for i in range(1, n):
        key = arr[i]
        #move elements of arr[0..i-1], that are
        # greater than key, to one position ahead
        # of their current position
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j+1] = arr[j]
            j -= 1
        arr[j+1] = key
    return arr

insertionSort(arr, n)

print(arr)

这非常有效,我得到的输出是 [1,2,3,4,5,5,6,9]。但是,一旦我添加到我的柜台。它停止工作。我基本上只是在函数中添加了几行。

def insertionSort(arr, n):
    counter = 0
    # Traverse through 1 to len(arr)
    for i in range(1, n):
        key = arr[i]
        #move elements of arr[0..i-1], that are
        # greater than key, to one position ahead
        # of their current position
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j+1] = arr[j]
            j -= 1
            counter += 1
        arr[j+1] = key
    return arr, counter
    print(counter)

insertionSort(arr, n)

print(arr)

打印出来的和以前一样。因此,我根据错误移动了一些东西并结束了:

arr = [1,9,6,5,4,3,5,2] #[open("rosalind_ins.txt").read().split(' ')]
n = 8
counter = 0

def insertionSort(arr, n):
    # Traverse through 1 to len(arr)
    for i in range(1, n):
        key = arr[i]
        #move elements of arr[0..i-1], that are
        # greater than key, to one position ahead
        # of their current position
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j+1] = arr[j]
            j -= 1
            counter += 1
        arr[j+1] = key
    return arr, counter

insertionSort(arr, n)
print(counter)
print(arr)

这给了我一个我不确定如何解决的错误,即 在赋值之前引用了局部变量“counter”。

所以我暂时放弃了,然后又遇到了另一个问题。 我只想至少让它工作,从 .txt 中提取数据并对其进行排序。因此,使用我收到的文件,我只是更改了程序的前两行,它给了我另一个错误,我不确定如何修复。

arr = [open("rosalind_ins.txt").read().split(' ')]
n = 811

此列表中有近 1000 个项目。 我在这里收到的错误是;

File "insertionSort.py", line 17, in insertionSort
    key = arr[i]
IndexError: list index out of range

我为文字墙道歉,可能问了一个简单的问题,但我已经坚持了 2 天,并且已经阅读了至少 4 篇关于插入排序的不同文章,但仍然一无所获。

最佳答案

您的第二个函数(您在第二个代码块中定义的函数)很好……但是您没有正确捕获返回参数。做

sorted_arr, counter = insertionSort(arr, n)

获取计数器

关于python - 插入排序算法python有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55128804/

相关文章:

python - Python抛出IndexError:列表索引超出范围,使用CSV

php - 从表中生成唯一的配对——一个 "Fixture"

wpf - 如何对 WPF 工具包 DataGrid 上的 DataGridTemplateColumn 进行排序?

获取大小为 1 的列表的单个元素的 Pythonic 方法

python - 通过对象引用的良好做法

c++ - 解决难题(最佳解决方案)

sorting - 如何在hadoop中实现排序?

python - 包含编号和名称排序的列表

python - 当我知道速度的 u 和 v 分量(numpy 2d 数组)时,如何使用 python 中的绘图程序绘制流线?

algorithm - 如何随机放置具有最小重叠和良好分散的矩形