我的插入排序代码有什么问题

时间:2017-03-04 21:06:09

标签: python list insertion-sort

我正在尝试编写插入排序的代码。我试图让代码获取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

2 个答案:

答案 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]