有没有一种方法可以对具有一些重复元素的未排序列表进行排序?

时间:2019-07-05 01:00:44

标签: python-3.x list sorting

我正在尝试对未排序的列表进行排序[4,5,9,9,9,0,1,8]

该列表包含两个重复的元素。我试图通过循环遍历每个元素,将每个元素与列表中的下一个元素进行比较,然后将较小的元素放在列表的开头来解决这个问题。

    def sort(ls:
         ls[x]
         x = [4, 5, 9, 9, 0, 1, 8]
          while len(x) > 0:
             for i in the range(0, len(x)):
               lowest = x[i]
               ls.append(lowest)

请,有人可以解释我出了什么问题以及代码应如何工作吗?

可能是我对问题有错误的考虑,并且我对代码应如何工作的推理不正确

4 个答案:

答案 0 :(得分:0)

是的,您可以尝试x.sort()或sorted(x)。签出https://www.programiz.com/python-programming/methods/built-in/sorted。另外,在您的程序中,我看不到您进行任何比较,例如,如果x [i] <= x [i + 1]则... 该代码块将按相同顺序附加所有元素,直到n * n次。 还要检查此https://en.wikipedia.org/wiki/Insertion_sort

答案 1 :(得分:0)

我不知道这是否正是您要寻找的内容,但是请尝试:sorted(ListObject)sorted()从最小到最大返回列表中的元素。如果重复一个元素,则重复的元素就在原始元素之后。希望有帮助。

答案 2 :(得分:0)

对于要排序的内置Python函数,以y为原始列表,可以使用sorted(y)或y.sort()。请记住sorted(y)将返回一个新列表,因此您需要将其分配给变量,例如x = sorted(y);而如果您使用x.sort(),它将原位改变原始列表,因此您可以按原样调用它。

如果您想实际实现排序功能,可以尝试以O(n log n)运行的Merge Sort或Quick Sort,它可以处理具有相同值的元素。如果需要,可以查看-> https://www.geeksforgeeks.org/python-program-for-merge-sort/。为了使排序算法更容易理解,Insertion或Bubble排序也可以处理重复项,但运行时较长O(n ^ 2)-> https://www.geeksforgeeks.org/python-program-for-bubble-sort/

但是,是的,我同意Nameet的观点,您当前发布的内容看起来只是按照相同的顺序添加。

尝试上述建议之一,希望这可以为您提供正确的方向,以帮助您查找内置函数或实现排序,这可以通过多种方式通过不同的adv和disadv来完成。每一个。希望这会有所帮助,并祝你好运!

答案 3 :(得分:0)

有几种流行的排序方式。以气泡排序为例

def bubbleSort(array):
    x = len(array)
    while(x > 1): # the code below make sense only there are at least 2 elements in the list
        for i in range(x-1): # maximum of i is x-2, the last element in arr is arr[x-1]

            if array[i] > array[i+1]:
                array[i], array[i+1] = array[i+1], array[i]
        x -= 1
    return array

x = [4, 5, 9, 9, 0, 1, 8]
bubbleSort(x)

您的代码具有与以下相同的逻辑

def sorts(x):
    ls = []
    while len(x) > 0:
        lowest = min(x)
        ls.append(lowest)
        x.remove(lowest)
    return ls 
x = [4, 5, 9, 9, 0, 1, 8]
sorts(x)
#output is [0, 1, 4, 5, 8, 9, 9]