Есть ли способ отсортировать несортированный список с некоторыми повторяющимися элементами? - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь отсортировать несортированный список [4, 5, 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 голосов
/ 05 июля 2019

Существует несколько популярных способов сортировки.в качестве примера рассмотрим пузырьковую сортировку,

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]
0 голосов
/ 05 июля 2019

Я не знаю, если это именно то, что вы ищете, но попробуйте: sorted(ListObject).sorted() возвращает элементы списка от самых маленьких до самых больших.Если один элемент повторяется, повторяющийся элемент находится сразу после исходного элемента.Надеюсь, что это помогло.

0 голосов
/ 05 июля 2019

Для сортировки встроенной функции Python, пусть y будет вашим исходным списком, вы можете использовать sorted (y) или y.sort (). Имейте в виду, что sorted (y) вернет новый список, так что выпотребуется присвоить его переменной, такой как x = sorted (y);тогда как, если вы используете x.sort (), он будет изменять исходный список на месте, поэтому вы бы просто назвали его как есть.

Если вы действительно хотите реализовать функцию сортировки, вы можете попробовать MergeСортировка или Быстрая сортировка, которые выполняются в O (n log n), в которых будут обрабатываться элементы с одинаковым значением.Вы можете проверить это, если хотите -> https://www.geeksforgeeks.org/python-program-for-merge-sort/.Для более простого понимания алгоритма сортировки вставка или пузырьковая сортировка также обрабатывают дубликаты, но имеют более длительное время выполнения O (n ^ 2) -> https://www.geeksforgeeks.org/python-program-for-bubble-sort/.

Но да, я согласен с Nameetто, что вы в данный момент опубликовали, выглядит так, будто оно будет добавлено в том же порядке.

Попробуйте одно из приведенных выше предложений, и, надеюсь, это поможет вам в правильном направлении, если вы ищете встроенную функцию или реализовать сортировку, которая может быть выполнена несколькими способами с разнымии отвращение к каждому.Надеюсь, это поможет и удачи!

0 голосов
/ 05 июля 2019

Да, вы можете попробовать x.sort () или отсортировать (x). Проверьте это https://www.programiz.com/python-programming/methods/built-in/sorted. Кроме того, в вашей программе я не вижу, чтобы вы делали какие-либо сравнения, например, если x [i] <= x [i + 1], то ... Этот блок кода просто добавляет все элементы в одном и том же порядке, до n * n раз. Также проверьте это <a href="https://en.wikipedia.org/wiki/Insertion_sort" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Insertion_sort

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...