Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181

Реализация быстрой сортировки

26.03.2014, 18:52. Показов 2334. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Есть код, который на мой взгляд должен работать верно:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def qsort(list, left, right):
    l, r = left, right
    mid = list[(right - left + 1)//2]
    while l < r:
        print("loop")
        while list[l] < mid:
            l+=1
        while list[r] > mid:
            r-=1
        if l <= r:
            if list[l] > list[r]:
                list[l], list[r] = list[r], list[l]
            l+=1
            r-=1
    if l<right:
        qsort(list,l,right)
    if r>left:
        qsort(list,left,r)
Однако, например на входе [-1,0,1,1,0,-1], рекурсия не останавливается. Подскажите, в чём проблема?
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2014, 18:52
Ответы с готовыми решениями:

Сравнить число перестановок при использовании сортировки "пузырьком", методом выбора и алгоритма быстрой сортировки
Напишите программу, которая сравнивает число перестановок элементов при использовании сортировки &quot;пузырьком&quot;, методом выбора и...

Про алгоритм быстрой сортировки
Теоретическую часть без проблем понял. a = a = 3 4 4 5 7 8 Теперь реализация на Питоне. Есть рабочий код с рекурсией. Однако...

Пытаюсь разбить на потоки алгоритм быстрой сортировки
Создал программу с одним потоком для алгоритма быстрой сортировки: #Программа в рамках одного созданного потока import threading as...

9
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
26.03.2014, 22:59
я не шарю в алгоритмах, но для начала я бы загуглил и сунулся бы сюда и сюда
0
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
27.03.2014, 07:40
Цитата Сообщение от PG94 Посмотреть сообщение
mid = list[(right - left + 1)//2]
скажите пожалуйста, какую роль здесь играет list?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
27.03.2014, 12:25
Если отсортировать надо числа, то есть numpy.sort.
0
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
27.03.2014, 12:51  [ТС]
Спасибо, что откликнулись.
Внесу уточнения:
1) Алгоритм нужно написать собственноручно: без исп. библиотек
2) list - это список, его и нужно отсортировать
3) Другие реализации я видел, но мне важно найти ошибку именно в этом варианте
4) Ограничений на тип элементов вообще говоря нет. Сейчас нужно, чтобы хотя бы работало для чисел.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
27.03.2014, 12:53
Цитата Сообщение от PG94 Посмотреть сообщение
2) list - это список, его и нужно отсортировать
list это зарезервированное слово и его нельзя использовать как переменную
0
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
27.03.2014, 20:44  [ТС]
Проблема не в этом.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
27.03.2014, 22:36
PG94, я не утверждал, что проблема в этом, но это недопустимая ошибка, которая в дальнейшем может привести к неожиданному для вас результату.
Вам Zarex, подкинул 2 толковые ссылки, с помощью которых можно разобраться в проблеме, разбирайтесь.
0
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
27.03.2014, 23:35
всё я решил - надо из управдомов переквалифицироваться в программисты PG94, нашёл ваш алгоритм здесь. Кое-что поменял и вуаля:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def qsort(list, left, right):
    l, r = left, right
    mid = list[(right - left + 1)//2]
    while l <= r:
        while list[l] < mid:
            l+=1
        while list[r] > mid:
            r-=1
        if l <= r:
            if list[l] > list[r]:
                list[l], list[r] = list[r], list[l]
            l+=1
            r-=1
    if left<r:
        qsort(list,left,r)
    if right>l:
        qsort(list,l,right-l)
    return list
1
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
28.03.2014, 11:03  [ТС]
Спасибо, ваш код не запускал, исправил свой: поправил вычисление mid.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2014, 11:03
Помогаю со студенческими работами здесь

Поиск по совпадению ключа, сортировка методом «быстрой сортировки»
Поиск по совпадению ключа при наличии нескольких элементов с одинаковым значением ключа. Сортировка методом «быстрой сортировки» с...

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

Реализация сортировки слиянием по книге Т. Кормена
Я начинающий программист и не могу разобраться, что не так с алгоритмом. Все делал по книге Т.Кормена &quot;Алгоритмы построение и...

Реализация быстрой сортировки
Есть массив структур STUDENT, в который мы, кроме всего остального, вводим 5 оценок. Нужно отсортировать массив структур по среднему балу...

Реализация быстрой сортировки
Здравствуйте помогите пожалуйста с заданием по Haskell. Реализовать функцию QuickSort, которая сортирует список номеров и позволяет быстро...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru