【发布时间】:2010-10-28 01:53:20
【问题描述】:
在课堂上我们正在做排序算法,虽然我在谈论它们和编写伪代码时理解它们很好,但我在为它们编写实际代码时遇到了问题。
这是我在 Python 中的尝试:
mylist = [12, 5, 13, 8, 9, 65]
def bubble(badList):
length = len(badList) - 1
unsorted = True
while unsorted:
for element in range(0,length):
unsorted = False
if badList[element] > badList[element + 1]:
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
print badList
else:
unsorted = True
print bubble(mylist)
现在,这个(据我所知)排序正确,但一旦完成,它就会无限循环。
如何修复此代码,以便函数正确完成并正确排序任何(合理)大小的列表?
附:我知道我不应该在函数中真正打印,我应该有一个返回,但我还没有这样做,因为我的代码还没有真正工作。
【问题讨论】:
-
@KM - 他应该离开你的草坪吗?
-
帖子本质上是:“我编码有问题,这是我做的,它不起作用。”显然有一个隐含的“有人可以给我一些指点吗?”与许多家庭作业问题不同,这个(a)写得很好,(b)是关于家庭作业的,(c)包括解决问题的良好尝试。我不认为缺少一个实际的问号会大大减损..
-
冒泡排序被用作学习工具,因为它是大多数人最容易理解的排序算法。这是学习排序和一般算法的一个很好的切入点。如果我们只教人们实际使用的东西,那么关于排序的讨论就会以“使用库排序例程”开始和结束。
-
这个问题是如何提出一个好的“家庭作业”问题的典型代表。就 John Fouhy 而言,有一个代码示例,它写得很好,而且发帖者正在努力让我们更容易提供帮助。干得好,joshhunt。
-
冒泡排序不是一种易于理解的排序算法。从我自己的经验和教学经验来看,我可以自信地说,插入排序、选择排序、min-sort(最小元素排序),甚至(对于一些学生来说)mergesort和quicksort都更容易理解——毕竟它们有点对应排序列表的自然方式,但冒泡排序只是人为的。此外,冒泡排序容易出现许多错误和无限循环错误,就像这里的这个问题。正如 Knuth 所说,“冒泡排序似乎没有什么可推荐的,除了一个吸引人的名字……”
标签: python algorithm sorting bubble-sort