Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 1 / 1
Регистрация: 29.03.2022
Сообщений: 22

Алгоритм сортировки списка

19.04.2022, 16:05. Показов 961. Ответов 3

Студворк — интернет-сервис помощи студентам
Есть список out = [789 -300;456 -100;123 600] состоящий из 3 элементов разделенных точкой с запятой. Каждый элемент - это номер счета - пробел - сумма. Нужно отсортировать список по сумме таким алгоритмом: Проходим циклом по всем элементам и сохраняем в переменную вне цикла элемент с минимальной суммой. После выполнения цикла записываем эту сумму в новый список outsort и удаляем ее из out. У меня все работает правильно, но строка с удалением ломает алгоритм, как изменить код, чтоб удалять правильно?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
out = [789 -300;456 -100;123 600]
q = 1
minn = "999 99999999"
i_minn = 0
outsort = []
while q <= len(out):
    for i in range(len(out)):
        if int(minn[4:]) > int(out[i][4:]):
            minn = out[i]
            i_minn = i
    outsort.append(minn)
    del out[i_minn]
    q += 1
 
print(out)
print(outsort)
['123 700', '456 -300', '789 -200'] - исходный список
['456 -300', '789 -200', '123 700'] - ожидаемый список
['456 -300', '456 -300'] - то что получается этим кодом
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.04.2022, 16:05
Ответы с готовыми решениями:

Алгоритм сортировки двусвязного списка методом двоичного включения
Помогите улучшить алгоритм сортировки. Сейчас он работает очень долго и я не уверен, что даже правильно. в аргументах список, который...

Алгоритм сортировки двусвязного списка методом двоичного включения
Помогите улучшить алгоритм сортировки. Сейчас он работает очень долго и я не уверен, что даже правильно. в аргументах список, который...

Алгоритм нисходящей сортировки слиянием. Переделать для двусвязного списка (LinkedList)
Есть проблема с переписыванием алгоритма для двусвязного списка LinkedList, как это можно реализовать public int...

3
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
19.04.2022, 19:52
Цитата Сообщение от Ihor2022 Посмотреть сообщение
Есть список out = [789 -300;456 -100;123 600] состоящий из 3 элементов разделенных точкой с запятой
не могут элементы в списке разделятся точкой с запятой

Цитата Сообщение от Ihor2022 Посмотреть сообщение
в новый список outsort и удаляем ее из out
зачем? сортировка подразумевает изменение основного списка.
Цитата Сообщение от Ihor2022 Посмотреть сообщение
Нужно отсортировать список по сумме
тут не получается сортированный список
Цитата Сообщение от Ihor2022 Посмотреть сообщение
['456 -300', '789 -200', '123 700'] - ожидаемый список
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
out = ['123 700', '456 -300', '789 -200']
minn = int(out[0].split()[1]) # берем за минимум первый элемент. это 700 из строки '123 700'
outsort = []
while len(out):
    for i in range(len(out)):
        int_elem = int(out[i].split()[1])
        if int_elem < minn:
            index_el = i
            minn = int_elem
    outsort.append(out[i])
    del out[i]
 
print( outsort)
['789 -200', '456 -300', '123 700']
1
2 / 1 / 1
Регистрация: 29.03.2022
Сообщений: 22
19.04.2022, 22:01  [ТС]
Semen-Semenich, Спасибо, но ваш код дает такой же результат как и мой: ['789 -200', '456 -300', '123 700']
И причина ошибки у нас одна и та же, уже разобрался:

1. minn нельзя присваивать 1-й элемент. Потому что он должен быть не меньше максимальной суммы, иначе алгоритм будет работать не правильно. Надо или бесконечность, я написал 1e999 или найти и присвоить максимальную сумму, например.

2. minn надо объявить в теле while, иначе после 1-го выполнения for и во время следующих выполнений - minn будет первым самым минимальным числом, меньшим за очередные минимальные.

Другие замечания понятны, согласен.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
out = ['123 700', '456 -300', '789 -200']
outsort = []
while len(out):
    minn = 1e999
    for i in range(len(out)):
        int_elem = int(out[i].split()[1])
        if int_elem < minn:
            index_el = i
            minn = int_elem
    outsort.append(out[index_el])
    del out[index_el]
 
print(outsort)
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
19.04.2022, 22:33
Лучший ответ Сообщение было отмечено Ihor2022 как решение

Решение

я вместо переменной index_el записал i
Python
1
2
outsort.append(out[i])
    del out[i]
вот и ошибка. запарился чуток и да задавать начальное значение мин нужно в теле цикла. ну главное разобрались
Python
1
2
3
4
5
6
7
8
9
10
11
12
out = ['123 700', '456 -300', '789 -200']
outsort = []
while len(out):
    minn = int(out[0].split()[1]) # берем за минимум первый элемент текущего списка
    index_el = 0
    for i in range(len(out)):
        int_elem = int(out[i].split()[1])
        if int_elem < minn:
            index_el = i
            minn = int_elem
    outsort.append(out.pop(index_el))
print( outsort)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.04.2022, 22:33
Помогаю со студенческими работами здесь

Реализовать алгоритм быстрой сортировки. Использовать алгоритмы сортировки и binarysearch из Collections
3. Реализовать алгоритм быстрой сортировки. Использовать алгоритмы сортировки и binarysearch из Collections

Изменить алгоритм сортировки (вместо сортировки вставками поставить сортировку слиянием Merge)
#include &quot;stdafx.h&quot; #include &quot;string.h&quot; #include &quot;iostream&quot; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include...

Выходные данные монографий: фамилия автора, название, год издания. Ключ сортировки – любой, алгоритм сортировки– пузырек
Добрый день, окажите пожалуйста помощь с этим заданием. Если можно, то с парочкой комментов. Заранее благодарю. Выходные данные...

Написать программу сортировки линейного массива целых чисел методом подсчета. Элементы отсортировать по возрастанию. Алгоритм сортировки , оформить в
Написать программу сортировки линейного массива целых чисел методом подсчета. Элементы отсортировать по возрастанию. Алгоритм сортировки ,...

Написать программу сортировки линейного массива целых чисел методом выбора. Элементы отсортировать по убыванию. Алгоритм сортировки , оформить в виде
Написать программу сортировки линейного массива целых чисел методом выбора. Элементы отсортировать по убыванию. Алгоритм сортировки ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru