Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 8

Реализация алгоритма сортировки слиянием

22.11.2012, 14:37. Показов 5017. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите, пожалуйста, с реализацией алгоритма сортировки слиянием на VBA.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2012, 14:37
Ответы с готовыми решениями:

Реализация алгоритма
Уважаемые форумчане, помогите, пожалуйста, с реализацией алгоритма на VBA Действия производятся в одном столбце Если ячейка...

Реализация алфавитной сортировки в нескольких листах
Прошу помощи! В данном файле реализовано на самом примитивном уровне движение товара в течении месяца. Каждый день отражен в отдельном...

Реализация алгоритма сортировки слиянием
Имеется массив строк вида char lent где каждая строка уже отсортирована по возрастанию. Нужно реализовать слияние. Просмотрел в...

4
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
22.11.2012, 15:07
Есть статья Алексея Спирина, код из С+ адаптирован под бейсик http://vbrussian.com/Article.asp?ID=100
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
22.11.2012, 16:17
Лучший ответ Сообщение было отмечено как решение

Решение

Моя реализация через рекурсию. Вывод на лист в Excel.
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
Option Explicit
 
 
' Тестирование сортировки - запускать эту процедуру
Sub test()
    Dim i As Long, A(1 To 65536) As Double
    
    ' Заполнить массив случайными числами от 0 до 1
    Randomize
    i = 1
    Do While i <= UBound(A)
        A(i) = Rnd()
        i = i + 1
    Loop
    
    ' Запуск сортировки слиянием
    Call MergeSort(A)
    
    ' Вывести массив на лист
    ' Две строки ниже немного ускорят вывод в Excel:
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    With Worksheets(1) ' Вывод в первый лист книги
        i = 1
        Do While i <= UBound(A)
            .Cells(i, 1) = A(i) ' Вывод в первый столбец книги
            i = i + 1
        Loop
    End With
    ' Две строки ниже восстановят нормальный режим работы Excel:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
 
 
' Рекурсивная сортировка слиянием
Private Sub MergeSort(A() As Double)
    Dim B() As Double, C() As Double, i As Long, j As Long
    Dim m As Long, n As Long, k As Long, l As Long
    
    m = UBound(A) ' Размерность основного массива
    ' Условие продолжения рекурсии m > 1, так как
    ' массив из одного элемента уже отсортирован :)
    If m > 1 Then
        ' Получить первую часть массива
        n = m \ 2 ' Размерность первой части массива
        ReDim B(1 To n)
        For i = 1 To n
            B(i) = A(i)
        Next i
        Call MergeSort(B) ' Отсортировать (рекурсия)
        
        ' Получить вторую часть массива
        k = m - n ' Размерность второй части массива
        ReDim C(1 To k)
        For i = 1 To k
            C(i) = A(n + i)
        Next i
        Call MergeSort(C) ' Отсортировать (рекурсия)
        
        ' Слить два отсортированных массива в основной
        i = 1 ' Счетчик первой части массива
        j = 1 ' Счетчик второй части массива
        l = 1 ' Счетчик основного массива
        Do While i <= n And j <= k
            If B(i) < C(j) Then
                A(l) = B(i)
                i = i + 1
            Else
                A(l) = C(j)
                j = j + 1
            End If
            l = l + 1
        Loop
        ' Дописать в массив невключенные "остатки"
        Do While i <= n ' От первой части массива
            A(l) = B(i)
            i = i + 1
            l = l + 1
        Loop
        Do While j <= k ' От второй части массива
            A(l) = C(j)
            j = j + 1
            l = l + 1
        Loop
    End If
End Sub
2
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 8
22.11.2012, 21:38  [ТС]
спасибо огромнейшее, спасатель)
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
22.11.2012, 22:32
Цитата Сообщение от mc-black Посмотреть сообщение
Моя реализация через рекурсию. Вывод на лист в Excel
Интересно!
А так можно проверить, что столбец в Excel действительно отсортирован - формула массива
Code
1
(A2:A65536>=A1:A65535)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2012, 22:32
Помогаю со студенческими работами здесь

Анализ быстродействия алгоритма сортировки массива слиянием
Дан массив размерностью N. Как узнать зависимость количества дополнительно расходуемой памяти от N?

может кто представить схему алгоритма сортировки слиянием?
пожалуйстаааааа:cry:

Реализация алгоритма сортировки пирамидой
Все привет! Нужна помощь в реализации алгоритма пирамидальной сортировки используя ДВУСВЯЗНУЮ ОЧЕРЕДЬ (дэк) . Реализации деки на...

Реализация алгоритма сортировки Шелла
Здравствуйте! Помогите пожалуйста с реализацией алгоритма сортировки Шелла. Вот дан простой массив: static void Main(string args) ...

Реализация алгоритма пузырьковой сортировки
Задача на массивы, где нужно банки переливать (ну, у меня она с этим ассоциируется). Раньше решал где-то, но уже не помню где.


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru