Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745

Есть такой вариант сортировки "пузырьком" ?

21.06.2013, 11:12. Показов 1036. Ответов 7

Студворк — интернет-сервис помощи студентам
Всегда сортировал "пузырьком" по примеру от БурундукЪ из верхней части раздела. Вчера пытался написать код по памяти и не смог - пришлось смотреть... Потом пришла идейка сделать чуток иначе и получил более быстрый вариант Подскажите: есть ли такой вариант в "природе" ?? Если есть, то почему тогда выложен более медленный ??

На форме только две кнопки. Покликайте по обеим и увидите время на цикл 1000...
Visual Basic
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
47
48
49
50
51
52
53
Dim a(40), b(40), N, V
 
Private Sub Command1_Click()
If V <> 1 Then Print "ÁóðóíäóêÚ âàðèàíò": V = 1:
tim1 = Timer
 
For cikl = 1 To 1000
'---------
 For i = 0 To N - 1
  For j = 0 To N - 2 - i
   If a(j) > a(j + 1) Then
     Tmp = a(j)
     a(j) = a(j + 1)
     a(j + 1) = Tmp
    End If
   Next j
  Next i
'---------
  For i = 0 To N - 1: a(i) = b(i): Next i:
Next cikl
 
tim2 = Timer: Print Str(Round(tim2 - tim1, 4))
End Sub
 
Private Sub Command2_Click()
If V <> 2 Then Print "Äðóãîé âàðèàíò": V = 2:
tim1 = Timer
 
For cikl = 1 To 1000
'---------
 For i = 0 To N - 2: 'èëè  For i = 0 To Ubound(a)-1:
   If a(i) > a(i + 1) Then
    For j = i To 0 Step -1
     If a(j) < a(j + 1) Then Exit For
     xx = a(j): a(j) = a(j + 1): a(j + 1) = xx:
    Next j:
   End If
 Next i:
'---------
  For i = 0 To N - 1: a(i) = b(i): Next i:
Next cikl
 
tim2 = Timer: Print Str(Round(tim2 - tim1, 4))
End Sub
 
Private Sub Form_Load()
Me.AutoRedraw = True
N = 41:
For i = 0 To N - 1: Randomize Timer
a(i) = Int(Rnd(1) * 99): 'Print Str(a(i))
b(i) = a(i):
Next i:
End Sub
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.06.2013, 11:12
Ответы с готовыми решениями:

Программа сравнивающая число перестановок сортировки «пузырьком» и сортировки методом выбора
задача С++Написать программу, которая сравнивает число перестановок элементов при использовании сортировки «пузырьком» и методом ...

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

Ребят как переделать метод сортировки пузырьком на метод сортировки простым выбором
public void SortPuzirek(int mass, int Size) // метод, выполняющий сортировку методом пузырька { int metka, obmen =...

7
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
21.06.2013, 18:30
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от morgann55 Посмотреть сообщение
есть ли такой вариант в "природе" ?
Неизвестно. Лично я пользуюсь быстрой сортировкой - это ещё раза в 3-4 быстрее, чем пузырьковая.
Добавил 3-ю кнопочку для сравнения


Visual Basic
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Dim a(40) As Long, b(40), N, V
 
' Selectionsort.
Public Sub Selectionsort(List() As Long, min As Long, max As Long)
Dim i As Long
Dim j As Long
Dim best_value As Long
Dim best_j As Long
 
    For i = min To max - 1
        best_value = List(i)
        best_j = i
        For j = i + 1 To max
            If List(j) < best_value Then
                best_value = List(j)
                best_j = j
            End If
        Next j
        List(best_j) = List(i)
        List(i) = best_value
    Next i
End Sub
Private Sub Command1_Click()
If V <> 1 Then Print "БурундукЪ вариант": V = 1:
tim1 = Timer
 
For cikl = 1 To 1000
 For i = 0 To N - 1: a(i) = b(i): Next i:
'---------
 For i = 0 To N - 1
  For j = 0 To N - 2 - i
   If a(j) > a(j + 1) Then
     Tmp = a(j)
     a(j) = a(j + 1)
     a(j + 1) = Tmp
    End If
   Next j
  Next i
'---------
 
Next cikl
 
tim2 = Timer: Print Str(Round(tim2 - tim1, 4))
 
End Sub
 
Private Sub Command2_Click()
If V <> 2 Then Print "Другой вариант": V = 2:
tim1 = Timer
 
For cikl = 1 To 1000
 For i = 0 To N - 1: a(i) = b(i): Next i:
'---------
 For i = 0 To N - 2: 'или  For i = 0 To Ubound(a)-1:
   If a(i) > a(i + 1) Then
    For j = i To 0 Step -1
     If a(j) < a(j + 1) Then Exit For
     xx = a(j): a(j) = a(j + 1): a(j + 1) = xx:
    Next j:
   End If
 Next i:
'---------
 
Next cikl
 
tim2 = Timer: Print Str(Round(tim2 - tim1, 4))
 
End Sub
 Public Sub Quicksort(List() As Long, ByVal min As Long, ByVal max As Long)
Dim med_value As Long
Dim hi As Long
Dim lo As Long
Dim i As Long
    If max - min < CutOff Then
        Selectionsort List(), min, max
        Exit Sub
    End If
    i = Int((max - min + 1) * Rnd + min)
    med_value = List(i)
    List(i) = List(min)
    lo = min
    hi = max
    Do
         Do While List(hi) >= med_value
            hi = hi - 1
            If hi <= lo Then Exit Do
        Loop
        If hi <= lo Then
            List(lo) = med_value
            Exit Do
        End If
 
        List(lo) = List(hi)
     
        lo = lo + 1
        Do While List(lo) < med_value
            lo = lo + 1
            If lo >= hi Then Exit Do
        Loop
        If lo >= hi Then
            lo = hi
            List(hi) = med_value
            Exit Do
        End If
        List(hi) = List(lo)
    Loop
    
    ' Sort the two sublists.
    Quicksort List(), min, lo - 1
    Quicksort List(), lo + 1, max
End Sub
 
 
Private Sub Command3_Click()
tim1 = Timer
For cikl = 1 To 1000
 For i = 0 To N - 1: a(i) = b(i): Next i:
Quicksort a(), 0, 40
Next cikl
tim2 = Timer: Print "Quicksort " & Str(Round(tim2 - tim1, 4))
 
End Sub
 
Private Sub Form_Load()
Me.AutoRedraw = True
N = 41:
For i = 0 To N - 1: Randomize Timer
a(i) = Int(Rnd(1) * 99): 'Print Str(a(i))
b(i) = a(i):
Next i:
End Sub
3
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
21.06.2013, 19:01  [ТС]
@Pro_grammer, Ну когда надо большие объёмы перелопатить, то я пузыри не пускаю Но такой код ТОЧНО по памяти не воспроизвести А когда в простенькой задачке надо чего-то "маленькое" упорядочить, то как-то и жалко много места в коде занимать
Кстати, что это за Упоминание у меня в личке появилось ??
0
21.06.2013, 19:44

Не по теме:

@morgann55, https://www.cyberforum.ru/abou... ost4751242
Действует, если возле ника стоит знак @, обернутое в теги жирности b /b

1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
21.06.2013, 19:53
Цитата Сообщение от morgann55 Посмотреть сообщение
такой код ТОЧНО по памяти не воспроизвести
Согласен. Но и не надо. Лично у меня ( как можно заметить по Public Sub) валяется всё это хозяйство в отдельном модуле. Нужна сортировка - подключаю модуль, что гораздо быстрее воспроизведения по памяти даже самого маленького кода сортировки! А на конечный размер несколько сотен байт особо не влияют.
0
 Аватар для Yorksik
31 / 50 / 2
Регистрация: 10.12.2011
Сообщений: 383
21.06.2013, 22:15
Смотря какие значения мы упорядочиваем и их отношение друг к другу.
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
21.06.2013, 23:04  [ТС]
Цитата Сообщение от Yorksik Посмотреть сообщение
Смотря какие значения мы упорядочиваем и их отношение друг к другу.
Да, конечно, "упорядочить" понятие широкое (пардон). Я имел ввиду что обычно задают студентам - по росту расставить...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
22.06.2013, 23:09
Цитата Сообщение от morgann55 Посмотреть сообщение
А когда в простенькой задачке надо чего-то "маленькое" упорядочить, то как-то и жалко много места в коде занимать
- да, есть такое дело... Все элементарные сортировки имеют выч. сложность O(n2). Но сортировка вставками устойчива и естественна, т.е. не переставляет одинаковые и работает быстрее, если массив частично отсортирован (в этом случае может, наверное, обогнать QuickSort).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2013, 23:09
Помогаю со студенческими работами здесь

Сортировки пузырьком
Задан массив AX (N). Добавить массив С(К). Выполнить обменную сортировку. В полученном векторе удалите элементы кратные шести. Выполнить...

Сортировки пузырьком
Сейчас изучаю сортировку пузырьком на задачах по Паскалю. Помогите пожалуйста решить задачки: 1) Отсортировать массив A пузырковой...

Возможен ли такой вариант ?
Есть у нас свой радио сервер , на нём можно открыть свою радиостанцию , и есть так назывываемое Demo радио (радио непосредственно нашего...

Улучшение сортировки пузырьком
Задание : Modify the bubbleSort() method so that it’s bidirectional. This means the in index will first carry the largest item from left to...

Метод сортировки пузырьком
Здравствуйте!Я никак не могу написать программу Мне нужно в отсортированном одномерном массиве найти наименьшее число.Разделить прогу на...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru