Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 14.11.2015
Сообщений: 19

Метод пузырька, как уменьшить число полных циклов при сортировке?

15.11.2015, 14:48. Показов 1452. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как можно доработать программу, чтобы уменьшилось кол-во полных циклов(проходов) при сортировке?
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CLS
DIM a(10)
RANDOMIZE TIMER
FOR n = 1 TO 10
    a(n) = INT(RND * 15)
    PRINT a(n);
NEXT
PRINT
FOR m = 1 TO 9
    FOR n = 1 TO 9
        IF a(n) > a(n + 1) THEN SWAP a(n), a(n + 1)
    NEXT
    PRINT
    FOR i = 1 TO 10
        PRINT a(i);
    NEXT
NEXT
PRINT
FOR n = 1 TO 10
    PRINT a(n);
NEXT
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2015, 14:48
Ответы с готовыми решениями:

Ошибка при сортировке односвязного списка методом пузырька
Здравствуйте, возникла проблема. Нужно отсортировать элементы структуры односвязного списка. Воспользовался методом пузырька (код ниже)....

Определить количество циклов сравнений при поиске в сортировке
Дали задание, вывести на форме (допустим в edit) количество циклов сравнений при поиске в сортировке. Линейный и бинарный поиск. Заранее...

Определить число полных часов и число полных минут, прошедших с начала суток
С начала суток часовая стрелка повернулась на "y" градусов. ( 0≤y<360,y-вещественное число).Определить число полных часов и число полных...

15
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
15.11.2015, 19:05
А что делает цикл в строках 14-16?
Для сортировки он не нужен.
0
0 / 0 / 0
Регистрация: 14.11.2015
Сообщений: 19
15.11.2015, 19:12  [ТС]
программа выводит все циклы сортировки
Миниатюры
Метод пузырька, как уменьшить число полных циклов при сортировке?  
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
15.11.2015, 21:00
Измените заголовок цикла в строке 10 на и проверьте.

QBasic/QuickBASIC
1
2
3
4
 
FOR n = 1 TO 10 - m
   IF a(n) > a(n + 1) THEN SWAP a(n), a(n + 1)
NEXT
0
0 / 0 / 0
Регистрация: 14.11.2015
Сообщений: 19
15.11.2015, 21:09  [ТС]
не работает
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
15.11.2015, 21:19
Я проверил. У меня работает. А что у вас?
Какую ошибку выдает?
0
0 / 0 / 0
Регистрация: 14.11.2015
Сообщений: 19
15.11.2015, 21:22  [ТС]
последних повторяющихся строк быть не должно, а они есть
Миниатюры
Метод пузырька, как уменьшить число полных циклов при сортировке?  
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
15.11.2015, 21:31
Это не ошибка. У вашей программы число проходов
равно 81. Если изменить заголовок, то число проходов 45.
Или вам нужно уменьшить именно количество выводимых
строк?
0
0 / 0 / 0
Регистрация: 14.11.2015
Сообщений: 19
15.11.2015, 21:38  [ТС]
нужно уменьшить количество выводимых строк
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
16.11.2015, 09:29
Для этого метода уменьшить число строк невозможно.
Ибо внешний цикл изменяется ровно 9 раз.
(Столько раз и будет выводиться строка)
Зато внутренний цикл уменьшает число оборотов так
9; 8; 7; ....1
Понимаете эффективность программы определяется не
числом оборотов внешнего цикла, а числом оборотов
внутреннего цикла. Можно поставить во внутренний цикл
Счетчик k=k+1 и он покажет истинное число проходов.

Добавлено через 11 часов 32 минуты
Это программа делает то, что вы хотели
Она выводит переменное число строк, именно
тогда когда происходят изменения.
(запустите программу и убедитесь сами)


QBasic/QuickBASIC
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
CLS
DIM a(10)
RANDOMIZE TIMER
 
FOR n = 1 TO 10
   a(n) = INT(15 * RND)
   PRINT a(n);
NEXT n
 
PRINT
FOR m = 1 TO 9
FOR n = 1 TO 10 - m
   IF a(n) > a(n + 1) THEN
      SWAP a(n), a(n + 1)
      k = k + 1
      IF k > 20 THEN LOCATE k - 20, 40
         FOR i = 1 TO 10
            PRINT a(i);
         NEXT i: PRINT
   END IF
NEXT n
NEXT m
PRINT
 
LOCATE 21, 40
FOR n = 1 TO 10
   PRINT a(n);
NEXT n
 
END
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38175 / 21110 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
17.11.2015, 19:22
Лучший ответ Сообщение было отмечено Quiet Snow как решение

Решение

Это - не пузырьковая сортировка. Правильная пузырьковая сортировка должна выглядеть примерно так:

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   rem массив A(n)
 
   DO
 
       c=0
 
       FOR i=1 TO n-1
           IF A(i) > A(i+1) THEN 
              SWAP A(i),A(i+1) 
              c=c+1
           END IF
       NEXT i
 
       IF c=0 THEN EXIT DO '::: Если перестановок не было - массив отсортирован
 
   LOOP
Добавлено через 1 минуту
Цитата Сообщение от geh Посмотреть сообщение
Понимаете эффективность программы определяется не
числом оборотов внешнего цикла, а числом оборотов
внутреннего цикла.
- их произведением.
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
17.11.2015, 19:34
Catstail,
Вы правы (как всегда)!
Но позвольте вам капельку возражений.
Там внутренний цикл - переменной длины. И здесь просто так перемножить нельзя. А под числом оборотов внутреннего цикла я подразумевал именно общее количество (с учетом внешнего цикла) его оборотов. Наверное я должен был четко сказать об этом. Но автор темы уже ушел и я не смог ...
1
17.11.2015, 19:38

Не по теме:

END
Вот засранец, сожрал три байта форумного места. Просто засранец!:D

0
17.11.2015, 19:43

Не по теме:

Цитата Сообщение от geh Посмотреть сообщение
как всегда
- далеко не всегда!

0
18.11.2015, 07:17

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
Не по теме:
Цитата Сообщение от geh Посмотреть сообщение
как всегда
- далеко не всегда!
Не переживайте, лизнуть в зад это его кредо. Модераторы относятся с пониманием :)

0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
23.11.2015, 17:30
Цитата Сообщение от Catstail Посмотреть сообщение
Правильная пузырьковая сортировка
то был не самый оптимальный вариант ;-)
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
nn = n
DO
  nn = nn - 1
  c = 0
  FOR i=1 TO nn
    IF A(i) > A(i+1) THEN
      SWAP A(i), A(i+1)
      c = 1
    END IF
  NEXT
  IF c=0 THEN EXIT DO
LOOP
Тяжёлый элемент утонет за 1 проход, поэтому на следующем проходе можно смотреть на 1 элемент меньше, что улучшает худший случай (здесь -- когда лёгкий элемент стоит последним).

Добавлено через 1 час 6 минут
И чтоб два раза не вставать, добавив проход в обратном направлении, получим шейкерную сортировку, где экстремальные элементы тонут и всплывают за один проход внешнего цикла:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'DIM a(n)
L = 1 : R = n-1
DO
  c = 0
  FOR i = L TO R
    IF a(i) > a(i+1) THEN
      SWAP a(i), a(i+1) : c = 1
    END IF
  NEXT
  IF c = 0 THEN EXIT DO
  R = R - 1 : c = 0
  FOR i = R TO L STEP -1
    IF a(i) > a(i+1) THEN
      SWAP a(i), a(i+1) : c = 1
    END IF
  NEXT
  IF c = 0 THEN EXIT DO
  L = L + 1
LOOP
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2015, 17:30
Помогаю со студенческими работами здесь

Определить число полных часов и число полных минут, прошедших с начала суток
С начала суток часовая стрелка повернулась на y градусов (0<=y<=360, y - вещественное число). Определить число полных часов и число полных...

Определить число полных часов и полных минут, прошедших с начала суток.
21. С начала суток часовая стрелка повернулась на y градусов (0 ≤ y <360, y — вещественное число). Определить число полных часов и полных...

Дана масса в килограммах.Найти число полных центнеров в ней(Именно полных)
Верна ли программа?Не нужно мне предлагать инт,тут нужен именно флоат. #include <conio.h> #include <stdio.h> #include...

Ошибка в сортировке методом пузырька
Программа работает, но вот с методом пузырька проблема, никак не получается правильно отсортировать.Нужно именно методом пузырька. ...

Ошибка в сортировке методом пузырька
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru