Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/55: Рейтинг темы: голосов - 55, средняя оценка - 4.51
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933

Улучшенная сортировка пузырьком

23.02.2020, 19:48. Показов 10415. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сортирую массив array от меньшего к большему но обхожу с конца. Хочу улучшить алгоритм. Чтобы если последний обмен был раньше чем граница, то на следующем заходе он бы бежал до индекса последнего обмена. Что-то никак это не получается

Вот здесь вот эту i нужно ограничивать уже другим числом, а не значением из внешнего цикла:
Python
1
for j in range(len(arr) - 1, i, -1):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def sort_bubble(arr, dim):
  
    exchange = True
    for i in range(0, dim - 1):
        if not exchange:
            break
        exchange = False
 
        for j in range(len(arr) - 1, i, -1):
            if arr[j] < arr[j - 1]:
                exchange = True
                temp = arr[j]
                arr[j] = arr[j - 1]
                arr[j - 1] = temp
 
    return arr
Желательно дополнительные условия не использовать.

Добавлено через 13 минут
Разобрался сам, можно удалить тему. Затупил сам
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2020, 19:48
Ответы с готовыми решениями:

Сортировка пузырьком
Все просто, вам поступает число n - количество элементов в списке, и затем сам список. Ваша задача отсортировать список по возрастанию...

Сортировка пузырьком
Всем привет, не могу понять, почему проходит только один этап сортировки (сортируется одно число, остальные остаются на месте). ---- ...

Сортировка пузырьком по невозрастанию
Дан список целых чисел. Отсортируйте его в порядке невозрастания значений. Выведите полученный список на экран. Решите эту задачу при...

6
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
23.02.2020, 20:03
Цитата Сообщение от Senarist Посмотреть сообщение
temp = arr[j]
                arr[j] = arr[j - 1]
                arr[j - 1] = temp
это можно заменить

Python
1
arr[j-1], arr[j] = arr[j], arr[j-1]
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
23.02.2020, 20:19
tooru, ты называешь это улучшенной сортировкой? В чем улучшение? Взгляни, так не лучше ли будет:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def bsort(arr):
    k=0
    n=len(arr)
    while (True):
       c=0
       for i in range(n-k-1):
           j=n-i-1
           if arr[j]<arr[j-1]:
              arr[j],arr[j-1]=arr[j-1],arr[j]
              c+=1
       if c==0:
           break
 
 
z=[1,2,3,1,2,-3,1,2,3]
bsort(z)
print(z)
1
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
23.02.2020, 20:23  [ТС]
Catstail,
Чем мой вариант хуже?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def sort_bubble(arr, dim):
    exchange = True
    k = 0
    step = 0
    for i in range(0, dim - 1):
        if not exchange:
            break
        exchange = False
 
        for j in range(len(arr) - 1, step, -1):
            if arr[j] < arr[j - 1]:
                exchange = True
                arr[j-1], arr[j] = arr[j], arr[j-1]
                k = j
        step = k
 
    print(arr)
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
23.02.2020, 20:30
Цитата Сообщение от Catstail Посмотреть сообщение
Взгляни, так не лучше ли будет
Вообще-то у вас 8 шагов, а у меня 7

7 шагов
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
arr = [1, 3, 5, 8, 6]
 
counter = 0
 
def buble_sort(arr):
    global counter
    exchange = True
    ln = len(arr)-1
    for i in range(ln):
      if not exchange:
          break
      exchange = False
      for j in range(ln, 0, -1):
            if arr[j] < arr[j-1]:
              arr[j-1], arr[j] = arr[j], arr[j-1]
              exchange = True
            counter += 1
      ln -= 1
    return arr
 
print(buble_sort(arr))
print(counter)
8 шагов
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
counter = 0
 
def bsort(arr):
    global counter
    k=0
    n=len(arr)
    while (True):
       c=0
       for i in range(n-k-1):
           j=n-i-1
           if arr[j]<arr[j-1]:
              arr[j],arr[j-1]=arr[j-1],arr[j]
              c+=1
           counter += 1
       if c==0:
           break
 
 
z=[1, 3, 5, 8, 6]
bsort(z)
print(z)
print(counter)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
23.02.2020, 20:47
Лучший ответ Сообщение было отмечено tooru как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# мой код
 
def bsort(arr):
    k=0
    n=len(arr)
    gc=0
    while (True):
       c=0
       for i in range(n-k-1):
           j=n-i-1
           if arr[j]<arr[j-1]:
              arr[j],arr[j-1]=arr[j-1],arr[j]
              c+=1
              gc+=1
       if c==0:
           break
    return gc   
 
# твой код
       
counter = 0
 
def buble_sort(arr):
    global counter
    exchange = True
    ln = len(arr)-1
    for i in range(ln):
      if not exchange:
          break
      exchange = False
      for j in range(ln, 0, -1):
            if arr[j] < arr[j-1]:
              arr[j-1], arr[j] = arr[j], arr[j-1]
              exchange = True
            counter += 1
      ln -= 1
    return arr
 
arr=[1,1,1,2,2,3,2] 
print(buble_sort(arr))
print(counter)       
 
arr=[1,1,1,2,2,3,2] 
k=bsort(arr)
print(arr)        
print(k)
У тебя 11, у меня 1... И, кроме того - лишние переменные.
1
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
23.02.2020, 20:56
Цитата Сообщение от Catstail Посмотреть сообщение
У тебя 11, у меня 1... И, кроме того - лишние переменные.
Это я хрень сделал, переменная глобальная, 7 шагов из моего кода + 1
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2020, 20:56
Помогаю со студенческими работами здесь

Сортировка пузырьком и бинарный поиск
Помоги выполнить. Написать программу, сортирующую пузырьком целочисленный массив и выполняющую бинарный поиск поиск по нему . Размер...

Сортировка пузырьком в две строки
привет помогите с задачкой пожалуйста надо чтобы была сортировка в 2 строки а получается в 10 from random import randint N = 10 A =...

Сортировка студентов группы по алфавиту (пузырьком)
Написать программу, сортирующую студентов группы по алфавиту и использующую сортировку пузырьком.

Сортировка пузырьком, добавить ввод данных пользователем
задать пользовательский ввод чисел A def BubbleSort(A): for i in reversed(range(len(A) + 1)): flag = True ...

Сортировка пузырьком элементов, стоящих на непарных местах
Дан список целых чисел, заданных случайным образом. Количество элементов вводится с клавиатуры. Изменить метод пузырька таким образом,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 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. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru