使用python气泡排序的稳定排序
所以,我得到了我的元组列表,按照整数的顺序进行排序。我缺少的是使排序稳定 如何使气泡排序稳定?(保持类似物品的秩序)使用python气泡排序的稳定排序,python,sorting,Python,Sorting,所以,我得到了我的元组列表,按照整数的顺序进行排序。我缺少的是使排序稳定 如何使气泡排序稳定?(保持类似物品的秩序) def bubble\u sort\u第二个值(元组列表): 新列表=[] 项目移动=0 对于元组列表中的i: NEWLIST.append(一) 对于范围内的i(len(NEWLIST)): 对于范围(i+1,len(NEWLIST))中的j: 如果(NEWLIST[j][1] false 和真< /代码>,不必要的括号等等…所有这些都使得读取代码变得困难得多,因此调试代码不是
def bubble\u sort\u第二个值(元组列表):
新列表=[]
项目移动=0
对于元组列表中的i:
NEWLIST.append(一)
对于范围内的i(len(NEWLIST)):
对于范围(i+1,len(NEWLIST))中的j:
如果(NEWLIST[j][1]
测试仪预期的重新结果与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)]
结果\u代码气泡\u 14错误1
注意h2/3的混合。。。我需要修理它。。我所说的不稳定的意思是,你现在能做的最好的事情就是理解它为什么要切换这些项目。在每个步骤中打印要更改的项目。那么你可能会理解这种行为 所以我尝试了一下,你不需要将当前项与列表中的下一项进行比较,而是将当前项与列表中的以下所有项进行比较。我在下面所做的更改可能会给你想要的结果
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(len(NEWLIST)-1):
k=j+1
if(NEWLIST[j][1] > NEWLIST[k][1]):
ITEM_MOVE = 1
NEWLIST[j],NEWLIST[k] = NEWLIST[k],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)
所以你所做的不是100%的冒泡排序。试试这个,如果你需要我解释为什么你的不起作用,告诉我所有标题中的变量名,中间行中的随机制表符,使用<代码> 0 和<代码> 1 意味着“代码> false 和<代码>真< /代码>,不必要的括号等等…所有这些都使得读取代码变得困难得多,因此调试代码不是一种冒泡排序。冒泡排序的全部要点是,每次通过时,只将每个元素与它的近邻进行比较。保留
项目移动
标志的原因是需要保持循环,直到它为false。所以,没有办法把它变成一个稳定的冒泡排序,就是把它扔掉,首先写一个冒泡排序(它会自动稳定)。@abarnet我很确定他现在的代码是冒泡排序ITEM_MOVE
除了短路打印逻辑之外,什么也不做,这可以说是不必要的。@Manny D-不,这不是冒泡排序。这是一种带有大量不必要交换的选择排序。@user2970357-请注意这里abarnert的建议。气泡排序本质上是排序稳定的。您所需要做的就是正确地实现算法-对于元组的输入_list=[('a',2),('b',2),('c',1)],您的代码返回[('a',2),('b',2),('c',1)]。正确的输出应该是[('c',1),('a',2),('b',2)]我试了几次,结果很好。您确定正在使用(NEWLIST[j][1]>NEWLIST[k][1])而不是(NEWLIST[j][1]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(len(NEWLIST)-1):
k=j+1
if(NEWLIST[j][1] > NEWLIST[k][1]):
ITEM_MOVE = 1
NEWLIST[j],NEWLIST[k] = NEWLIST[k],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)