【发布时间】:2013-11-08 21:13:08
【问题描述】:
所以,我得到了要按整数顺序排序的元组列表。我缺少的是使排序稳定..
如何使冒泡排序稳定? (保持类似物品的顺序)
def bubble_sort_2nd_value(tuples_list):
NEWLIST = []
ITEM_MOVE = 0
for i in tuples_list:
NEWLIST.append(i)
for i in range(len(NEWLIST)):
for j in range(i+1, len(NEWLIST)):
if(NEWLIST[j][1] < NEWLIST[i][1]):
ITEM_MOVE = 1
NEWLIST[j],NEWLIST[i] = NEWLIST[i],NEWLIST[j]
if (ITEM_MOVE == 0):
print(tuples_list)
else:
print(NEWLIST)
tuples_list = [('h2', 8), ('h4', 30), ('h6', 7), ('h8', 54), ('h1', 72), ('h3', 8), ('h5', 7), ('h7', 15), ('h7', 24)]
bubble_sort_2nd_value(tuples_list)
预期的测试结果和y结果比较: 显示元素 0 的输出 预期:[('h6', 7), ('h5', 7), ('h2', 8), ('h3', 8), ('h7', 15), ('h9', 24) , ('h4', 30), ('h8', 54), ('h1', 72)] 实际:[('h6', 7), ('h5', 7), ('h3', 8), ('h2', 8), ('h7', 15), ('h9', 24) , ('h4', 30), ('h8', 54), ('h1', 72)] result_code bubble_14 错误 1
注意 h2/3 混合...需要修复它.. 我的意思是不稳定
【问题讨论】:
-
变量名全部大写,行中间随机制表符,使用
0和1表示False和True,不必要的括号等等……所有这些使您的代码更难阅读,因此也更难调试。 -
同时,这不是冒泡排序。冒泡排序的重点在于,每次通过时,您只将每个元素与其直接相邻元素进行比较。您保留
ITEM_MOVE标志的原因是您需要继续循环直到它为假。所以,没有办法把它变成一个稳定的冒泡排序,就是把它扔掉,首先写一个冒泡排序(它会自动稳定)。 -
@abarnet 我很确定他当前的代码是冒泡排序的。
ITEM_MOVE只是将打印逻辑短路,这可以说是不必要的。 -
@Manny D - 不,这不是冒泡排序。这是一个选择排序,有一大堆不必要的交换。
-
@user2970357 - 在这里听取 abarnert 的建议。冒泡排序本质上是排序稳定的。您需要做的就是正确实现算法 - en.wikipedia.org/wiki/Bubble_sort