python - 插入排序不变断言失败

标签 python sorting assert insertion-sort

在 for 循环末尾的以下代码中,我使用断言函数来测试 a[i+1] 是否大于或等于 a[i] 但出现以下错误(在代码之后)以下)。同样在 C++ 中,带有以下内容的断言似乎工作得很好,但在 python(以下代码)中它似乎不起作用...有人知道为什么吗?

import random

class Sorting:
    #Precondition: An array a with values.
    #Postcondition: Array a[1...n] is sorted.
    def insertion_sort(self,a):
        #First loop invariant: Array a[1...i] is sorted.
        for j in range(1,len(a)):
            key = a[j]
            i = j-1
            #Second loop invariant: a[i] is the greatest value from a[i...j-1]
            while i >= 0 and a[i] > key:
                a[i+1] = a[i]
                i = i-1
            a[i+1] = key
            assert a[i+1] >= a[i]
        return a

    def random_array(self,size):
        b = []
        for i in range(0,size):
            b.append(random.randint(0,1000))
        return b


sort = Sorting()
print sort.insertion_sort(sort.random_array(10))

错误:

Traceback (most recent call last):
File "C:\Users\Albaraa\Desktop\CS253\Programming 1\Insertion_Sort.py", line 27, in          <module>
  print sort.insertion_sort(sort.random_array(10))
File "C:\Users\Albaraa\Desktop\CS253\Programming 1\Insertion_Sort.py", line 16, in insertion_sort
    assert a[i+1] >= a[i]
AssertionError

最佳答案

你的代码没问题。当i==-1时断言失败。在 Python 中,a[-1] 是列表的最后一个元素,因此在本例中,您要检查第一个元素 (a[-1+1] ) 大于或等于最后一个元素 (a[-1])。

关于python - 插入排序不变断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12359394/

相关文章:

c# - 异常断言和在 VS 中调试 C# 项目

python - 如何从 Python 启动命令行命令

c++ - 排序多个四边形的顶点

c++ - 使用推力对静态分配的数组进行排序

sorting - 自然mergesort链表

session - 使用断言 session 值的 CakePHP 测试

python - 如何使用 pandas 进行四舍五入计算

python - 属性错误: 'Model' object has no attribute '_name'

python - 替换序列中的 1's with 0'

java - JUnit 测试 assertEquals() 和 Assert.assertEquals() 的区别