Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745

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

21.06.2013, 11:12. Показов 1028. Ответов 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru