Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python气泡排序的稳定排序_Python_Sorting - Fatal编程技术网

使用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)