我正在尝试编写插入排序的代码。我试图让代码获取2个值,并在排序时将它们放入新的列表中。到目前为止,它只是将值放入列表而不对它们进行排序,我不太清楚为什么
pos = 0
pos2 = 1
go = True
while go == True:
for i in range(len(ex)-1):
stack.append(ex[pos])
print(stack)
stack.append(ex[pos2])
print(stack)
if stack[pos] > stack[pos2]:
stack[pos], stack[pos2] = stack[pos2], stack[pos]
print(stack)
pos = pos + 2
pos2 = pos2 + 2
我知道它效率不高,但它基于我为冒泡排序而制作的代码
go = True
add = 0
while go == True:
for i in range(len(ex)-1):
if ex[i] > ex[i+1]:
go = True
ex[i], ex[i+1] = ex[i+1], ex[i] #flips the numbers in the list
print(ex)
add = add + 1
if add >= len(ex):
go = False
EDIT 我已经彻底改变了,但仍然存在问题。它只交换一次值,即使它需要多次交换到正确的位置。这是代码
pos = 0
while pos < len(ex)-1:
for i in range(len(ex)-1):
stack.append(ex[i])
print(stack)
if stack[i-1] > stack[i]:
stack[i-1], stack[i] = stack[i], stack[i-1]
pos = pos + 1
else:
pos = pos + 1
答案 0 :(得分:1)
你必须将ex [pos]与ex [pos2]进行比较,然后先附加正确的元素:
if ex[pos] > ex[pos2]:
stack[pos].append(ex[pos2])
else stack[pos].append(ex[pos])
print(stack)
答案 1 :(得分:1)
以下是来自https://visualgo.net/sorting的经典插入排序的伪代码,这是学习排序算法的绝佳资源:
mark first element as sorted
for each unsorted element
'extract' the element
for i = lastSortedIndex to 0
if currentSortedElement > extractedElement
move sorted element to the right by 1
else: insert extracted element
以下是如何在python中实现插入排序:
def insertion_sort(l):
for i in range(1, len(l)):
j = i-1
key = l[i]
while (l[j] > key) and (j >= 0):
l[j+1] = l[j]
j -= 1
l[j+1] = key
return l
了解基本插入排序后,您应该能够了解实施中出错的地方,因为您未在实施中正确存储stack[pos]
。