2017-03-04 25 views
-1

我想编写的代码,是一个插入排序。我试图让代码将2个值分类并将它们放入新列表中。到目前为止,它只是把值到列表中没有他们进行排序,我不明白为什么什么是错的wtih我插入排序代码

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 

编辑 我已经彻底改变了它,但仍然存在问题。它只会交换一次数值,即使它需要多次交换才能在正确的位置。下面是代码

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

拿一张纸和分析你的代码。你一定会看到你出错的地方,这显然是一个很大的错误。 – hashcode55

+0

正如@ hashcode55提到的那样,您可以在纸上分析,或者打印变量的值,直到您看到发生了什么问题。 – 2017-03-05 01:22:27

回答

1

你要比较EX [POS]与前[POS2]那么你追加正确的要素第一:

if ex[pos] > ex[pos2]: 
    stack[pos].append(ex[pos2])    
else stack[pos].append(ex[pos]) 
print(stack) 
+0

我已经尝试添加这个,但它给了我一个错误。堆叠[POS] .append(EX [POS]) – Jeff

+0

IndexError:列表索引超出范围 – Jeff

+0

@Jeff它,因为你永远不会设置'go'为false。 – hashcode55

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]

+0

感谢您的支持,但我们应该在不查看预制代码的情况下执行此操作。我们被允许寻求帮助,但因为是周末(所以我不能问我的老师),而且我的朋友都没有能力提供帮助,所以我在这里教过会是一个很好的尝试的地方。 – Jeff

+0

好吧,我明白了......忽略第二个代码块,但我相信你的老师会允许你查看这个视觉算法网站,因为它是伪代码(在任何编程语言中,插入排序如何在高层次上起作用)。因为它会向你展示每个阶段发生的事情,这将真正帮助你理解它是如何在一个肤浅的层面上发挥作用的。 – shash678

相关问题