如何仅对列表的特定范围进行 Python 插入排序?
How to do Python insertion sort on certain range of the list only?
所以,我尝试得到 [1, 2, 3, 5, -4] 但我想得到 [3, 1, 2, 5, -4] 作为结果;因为我只想从列表
的索引1到索引4排序(包括开始,不包括结束;这意味着只从索引1到索引3排序,索引0和4保持原样)
def insertionSort(the_list, start, end):
for mark in range(start, end):
temp = the_list[mark]
i = mark-1
while i >= 0 and the_list[i] > temp:
the_list[i+1] = the_list[i]
i -= 1
the_list[i+1] = temp
return the_list
print(insertionSort([3, 2, 5, 1, -4], 1, 4))
谁能帮我修改代码,让我得到我想要的结果?谢谢。
您需要对要排序的部分进行切片。以下是我将如何实施。
def insertionSort(alist,s, e):
#check if s or e is greater than the length of the list
if s >= len(alist) or e >= len(alist):
#if True, then request is invalid
return ('invalid request')
#sort the list for the slice of data
alist[s:e] = sorted(alist[s:e])
# now return the full list
# The above code ensures you are not touching values before and after
return alist
print (insertionSort([3, 2, 5, 1, -4], 1, 4))
这个输出将是:
[3, 1, 2, 5, -4]
代码中的问题说明:
你的 for 循环从头到尾开始。但是,您正在检查从 start - 1 开始的值(代码 i = mark - 1)。当 mark 为 1(开始)时,您将 i 设置为 0(mark - 1,即 1 - 1 = 0)。这使您的代码考虑第 0 个位置。这就是为什么你得到 1, 2, 3, 5, -4
作为输出。
此外,如果您提供的值大于列表中元素的数量,您的代码将会崩溃。你也必须照顾好这种情况。例如,如果你给 print (insertionSort([3, 2, 5, 1, -4], 1, 7))
,代码会崩溃。
所以,我尝试得到 [1, 2, 3, 5, -4] 但我想得到 [3, 1, 2, 5, -4] 作为结果;因为我只想从列表
的索引1到索引4排序(包括开始,不包括结束;这意味着只从索引1到索引3排序,索引0和4保持原样)def insertionSort(the_list, start, end):
for mark in range(start, end):
temp = the_list[mark]
i = mark-1
while i >= 0 and the_list[i] > temp:
the_list[i+1] = the_list[i]
i -= 1
the_list[i+1] = temp
return the_list
print(insertionSort([3, 2, 5, 1, -4], 1, 4))
谁能帮我修改代码,让我得到我想要的结果?谢谢。
您需要对要排序的部分进行切片。以下是我将如何实施。
def insertionSort(alist,s, e):
#check if s or e is greater than the length of the list
if s >= len(alist) or e >= len(alist):
#if True, then request is invalid
return ('invalid request')
#sort the list for the slice of data
alist[s:e] = sorted(alist[s:e])
# now return the full list
# The above code ensures you are not touching values before and after
return alist
print (insertionSort([3, 2, 5, 1, -4], 1, 4))
这个输出将是:
[3, 1, 2, 5, -4]
代码中的问题说明:
你的 for 循环从头到尾开始。但是,您正在检查从 start - 1 开始的值(代码 i = mark - 1)。当 mark 为 1(开始)时,您将 i 设置为 0(mark - 1,即 1 - 1 = 0)。这使您的代码考虑第 0 个位置。这就是为什么你得到 1, 2, 3, 5, -4
作为输出。
此外,如果您提供的值大于列表中元素的数量,您的代码将会崩溃。你也必须照顾好这种情况。例如,如果你给 print (insertionSort([3, 2, 5, 1, -4], 1, 7))
,代码会崩溃。