Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
4 / 1 / 0
Регистрация: 08.06.2012
Сообщений: 11

Сортировка массива методом Хоара

09.06.2012, 21:35. Показов 2279. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не работает сортировка массива методом Хоара. Выводится исходный массив (проверял на пустой форме)
вот сама процедура
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub sort_h(ByVal i_n As Integer, ByVal i_k As Integer)
Dim i As Long, j As Long
i = i_n: j = i_k: k = ((i + j) \ 2): f = w(k)
Do
  While w(i) < f: i = i + 1: Wend: While f < w(j): j = j - 1: Wend
  If i <= j Then
    p = w(i): w(i) = w(j): w(j) = p:
    i = i + 1: j = j - 1
  End If
Loop Until i > j
If i_n < j Then sort_h i_n, j
If i < i_k Then sort_h i, i_k
End Sub
и ее вызов (после Option2.value)
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
Private Sub Command3_Click()
If X(1) <> "" Then
    Picture1.Cls
    Picture3.Cls
       If Option1.Value Then
        For i = 1 To 10
            For j = 10 To i + 1 Step -1
                If w(i) < w(j) Then
                    k = w(i)
                    w(i) = w(j)
                    w(j) = k
                End If
            Next j
        Next i
End If
If Option2.Value Then
sort_h i_n, i_k
End If
For i = 1 To 10
        Picture1.Print w(i)
    Next i
      For o = 1 To 10
        Picture3.Line (0, 0 + 15 * o)-(w(o), 10 + 15 * o), RGB(w(o) + 255, w(o), w(o)), B
    Next
    For i = 1 To 10
        ren = ren + CStr(w(i)) + " "
    Next i
Else
    pushbutton = MsgBox("Âûáåðèòå ìàññèâ!", 16, "Îøèáêà!!!...")
End If
End Sub
В чем может быть дело, ошибок компиляции нет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.06.2012, 21:35
Ответы с готовыми решениями:

Сортировка массива методом Хоара в Visual Basic и вывод в PictureBox
Привет всем помогите плиз. Имеется часть программы по сортировки массива. Нужно что бы при нажатии на command button отсортированный...

Сортировка массива методом сравнения и подсчета
Всем привет, помогите выполнить вот эти задания,если сможете. Заранее спасибо! В изображении помощь, есть образец по первому заданию

Сортировка массива по возрастанию методом вставки
Здравствуйте такая ситуация, мне нужна помощь в небольшом пояснении метода сортировки вставкой Вот допустим я сгенерировал исходный...

6
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
09.06.2012, 23:11
сам алгоритм сортировки вроде верный
содержит ли w массив?
Если не сложно - программу в студию прикрепите - можно будет посмотреть
0
4 / 1 / 0
Регистрация: 08.06.2012
Сообщений: 11
09.06.2012, 23:27  [ТС]
Код брал отсюда Посчитать, сколько раз в строке встречается каждая цифра
Вложения
Тип файла: rar программа.rar (17.2 Кб, 30 просмотров)
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
10.06.2012, 00:50
Если вы учитесь на гуманитария и бейсик вам после зачета нахрен не нужен будет то замените вызов процедуры сортировки:
Visual Basic
1
sort_h i_n, i_k
на такой
Visual Basic
1
sort_h w, 1, 10
Кстати в прикрепленной программе вы массив передаете в функцию а в примере кода приведенном здесь - нет
Но это не важно - важно другое - вы не передает границы массива, значения i_n и i_k у вас пустые
но если вы учитесь на программиста - то руки бы вам оторвать за такой кодинг, вне зависимотси от того сколько вы уже проучились.
Прежде всего зачем вы инициализируете массив с заведомо заданным кол-вом элементов?
А если в файле их будет больше вы потеряете часть инфы, а если меньше - как сейчас - то у вас появляется куча пустых элементов массива.
во-вторых - нахрена вы городите непонятно какой шифрации кусок кода для заполнения массива из файла когда можно обойтись простой командой Split?
в третьих - индексация массива во всех языках программирования как и любая индексация (циклы while, for) (кроме строк - в строках первая буква идет под индексом 1 вторая - 2 и т.д. в функциях работы со строками) начинается с нуля! Возьмите это за правило - это будет хорошим стилем программирования
первым делом что я бы сделал в вашей программе:
описание переменной w заменил на:
Visual Basic
1
Dim w as variant
или просто
Visual Basic
1
Dim w
Формирование массива из файла заменил бы на
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
        Do While Not (EOF(1))
            Input #1, m
'            For i = 1 To Len(m)
'                z = Mid(m, i, 1)
'                If z = " " Then
'                    j = j + 1
'                    X(j) = Mid(m, p, i - p)
'                    p = i + 1
'                End If
'            Next i
'            j = j + 1
'            X(j) = Mid(m, p, Len(m))
'            For i = 1 To j
'                Picture6.Print X(i)
'            Next i
        Loop
    Close #1
    
'    For i = 1 To j
'        w(i) = CInt(X(i))
'    Next i
    
    w = Split(m)
ваш код вынес за ремарку чтобы было понятнее, что заменяет функция сплит
туда же попал вывод на экран массива - но я думаете как вернуть - догадаетесь сами
и третье - все обращения к массиву в циклах надо переделать на такую конструкцию
Visual Basic
1
for i = 0 to Ubound(w)
тогда вы сможете работать с массивом любых размеров
кстати функция Split создает массив как раз начинающийся с 0-го индекса
тогда вызов процедуры сортировки будет выглядеть вот так:
Visual Basic
1
sort_h w, 0, Ubound(w)
вот как то так, аж писать устал

Да кстати! Почему то он сортирует у вас пузырьком и хоаром в разные стороны - один по убыванию второй по возрастанию - но видимо так надо.
И ошибку орфографическую на форме about исправьте
2
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.06.2012, 09:33
Цитата Сообщение от skol13 Посмотреть сообщение
индексация массива во всех языках программирования как и любая индексация (циклы while, for) (кроме строк - в строках первая буква идет под индексом 1 вторая - 2 и т.д. в функциях работы со строками) начинается с нуля! Возьмите это за правило - это будет хорошим стилем программирования

Не по теме:

А вот с этим можно поспорить. Если в С++ все массивы 0 - базируемые, то это его проблемы:D
А если в Бейсике можно сделать так, чтобы индексы начинались с единицы, значит нужно это использовать, тем более это во многих случаях очень удобно. Это скорее небольшой плюс Бейсика:)

1
10.06.2012, 13:57

Не по теме:


Ну конечно же можно поспорить!
Будет желание - тему создавайте :)
Но я за все же за то, как говорится в анекдоте - как отличить программиста от юзера?
Программист считать с 0 начинает :)

Кстати не зря же функция Split делит строку и создает массив индексируемый с 0 :)

0
4 / 1 / 0
Регистрация: 08.06.2012
Сообщений: 11
10.06.2012, 14:03  [ТС]
skol13
Спасибо большое,исправил, теперь работает. Можете помочь с выводом времени сортировки?
И еще при сворачивании программы исчезает график и результаты сортировки из picture... и т. д.
-Последнее сообщение здесь https://www.cyberforum.ru/orde... 00819.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.06.2012, 14:03
Помогаю со студенческими работами здесь

Сортировка массива методом бинарных деревьев
Исходные данные для исследования задаются с помощью генератора случайных чисел.Использовать массивы с количеством элементов от 500 до 5000...

Сортировка одномерного массива в порядке возрастания методом перестановки
Здравствуйте очень нужна ваша помощь,готовлюсь к сесии,а она в пятницу ,в visual basik 6.0 написать не совсем понял как,нужен будет код...

Сортировка массива методом Хоара
Задание: создать список, используя реализацию с помощью массива; размер списка определяет пользователь (ограничить возможный выбор...

Сортировка массива методом Шелла или Хоара
Нужно написать програму которая будет сортировать массив из 16 елементов быстрой сортировкой(Шелла или Хоара),отсортированый массив...

Сортировка методом Хоара
Здраствуйте помогите пожалуйста с программой не могу запрограммировать сортировку методом Хоара, мне задано зделать 3 сортировки (выбором,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru