bubblesort未对最后一个数字排序的问题

2024-10-02 00:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

新的编码和算法。试试最简单的泡泡运动。但似乎最后一个数字没有被排序?我真的不明白为什么

原始列表如下-list = [4, 5, 3, 10, 17, 6, 2, 22, 76, 99, 18, 7] 但是我的输出看起来像这样-[99, 2, 3, 4, 5, 6, 7, 10, 17, 18, 22, 76]

由于某些原因,99没有被换到后面,我无法指出原因

list = [4, 5, 3, 10, 17, 6, 2, 22, 76, 99, 18, 7]

def bblSort(list):
    for i in range(len(list)):
        print(list[i])
        for j in range(len(list) - 1):
            if list[i] <list[j+1]:
                list[i], list[j+1] = list[j+1], list[i]

    print(list)

Tags: in算法编码列表forlen排序def
3条回答

冒泡排序可以通过两个for循环或一个while循环和一个for循环来实现。这是一个使用while和for循环的实现,更容易理解

此函数使用内部for循环遍历列表,将每个对象与后面的对象进行比较,并在必要时交换这两个对象。外部while循环确保它在整个列表中一次又一次地重复for循环,直到不需要进一步交换为止

def bubble_sort(unsorted_list):
    my_list = list(unsorted_list) # create a copy to avoid mutating the original list
    unsorted = True
    while unsorted:
        unsorted = False
        for i in range (len(my_list)-1):
            if my_list[i] > my_list[i+1]:
                unsorted = True
                my_list[i] , my_list[i+1] = my_list[i+1], my_list[i]
    return my_list

unsorted_list = [5,2,4,90,140,23,554,32,98,12,15,0,43,-34,10]
print(bubble_sort(unsorted_list))

印刷品: [-34,0,2,4,5,10,12,15,23,32,43,90,98,140,554]

对于bubblesort,您需要对列表进行多次遍历,以确保它已排序。每次传递都保证将最大的数字移动到正在排序的列表部分的末尾。这意味着您不需要再次排序该位置,因此您只需要在下一次传递时排序到该位置

我不太懂Python,所以这是伪代码。它按升序对列表进行就地排序

bubblesort(list myList)
  for (hi <- myList.length - 1 downto 0) do
    for (lo <- 1 to hi) do
      if (myList[lo - 1] > myList[lo]) then
        swap(myList[lo - 1], myList[lo]) 
      endif
    endfor
  endfor
end bubblesort()

每个过程都会对开始和hi之间的列表部分进行排序,每个过程的hi减少一个

为了获得额外的积分,如果一张通行证不能进行任何交换,可以考虑提前完成。在这种情况下,列表已按顺序排序

您只需要一个循环,因为冒泡排序比较相邻的值。试着用i做一个循环,然后比较list[i]和list[i+1](注意列表的末尾)

顺便说一句,最好不要用类型名调用变量,这里为变量“list”选择另一个名称

相关问题 更多 >

    热门问题