Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2013, 21:16   #1
dimas6000
Новичок
Джуниор
 
Регистрация: 23.12.2013
Сообщений: 3
По умолчанию Сортировка выбором\вставками

Помогите найти ошибки, пожалуйста.

Дано задание на vba "Сортировка выбором по возрастанию с поиском и минимума, и максимума"
Реализовал, в большинстве случаев работает, но например массив "99,99,88,87,66,55,44,33,22,11" обрабатывает некорректно
Код:
Const n As Integer = 10
Dim a(n) As Integer
For i = 1 To n Step 1
a(i) = Cells(i, 1)
Next i

For i = 1 To n Step 1
    Min = i
    Max = n - i + 1
    For j = i + 1 To n - i + 1
        If a(j) < a(Min) Then
            Min = j
        End If
        If a(j) > a(Max) Then
            Max = j
        End If
    Next j
    If Min <> i Then
        temp = a(i)
        a(i) = a(Min)
        a(Min) = temp
    End If
    If Max <> n - i + 1 Then
        temp = a(Max)
        a(Max) = a(n - i + 1)
        a(n - i + 1) = temp
    End If
Next i

For i = 1 To n Step 1
Cells(i, 12) = a(i)
Next i
End Sub

И ещё тут какую-нибудь подсказку можно?)
Дано задание "Сортировка вставками по возрастанию с просмотром массива слева/справа"
Как должен реализовываться просмотр справа? Просмотр слева реализовать получилось, но не понимаю как его изменить, для просмотра справа, пробовал делать i от n-1 до 1 через while, ещё как-то пробовал, корректно ничего не хочет работать.
Код:
    Const n As Integer = 10
    Dim a(n) As Integer
    For i = 1 To n Step 1
        a(i) = Cells(i, 1)
    Next i
    
    
    For i = 2 To n Step 1
        Key = a(i)
        j = i - 1
        Do While j >= 1 And a(j) > Key
                a(j + 1) = a(j)
                j = j - 1
        Loop
        a(j + 1) = Key
    Next i
    
    For i = 1 To n Step 1
        Cells(i, 17) = a(i)
    Next i
dimas6000 вне форума Ответить с цитированием
Старый 24.12.2013, 17:08   #2
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

[QUOTE=dimas6000;1319409]Помогите найти ошибки, пожалуйста.

Дано задание на vba "Сортировка выбором по возрастанию с поиском и минимума, и максимума"
Реализовал, в большинстве случаев работает, но например массив "99,99,88,87,66,55,44,33,22,11" обрабатывает некорректно

убери с кода вот этот часть:
If Max <> n - i + 1 Then
temp = a(Max)
a(Max) = a(n - i + 1)
a(n - i + 1) = temp
End If
и код будет правильно работать.
roborrr вне форума Ответить с цитированием
Старый 24.12.2013, 23:16   #3
dimas6000
Новичок
Джуниор
 
Регистрация: 23.12.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от roborrr Посмотреть сообщение
убери с кода вот этот часть:
If Max <> n - i + 1 Then
temp = a(Max)
a(Max) = a(n - i + 1)
a(n - i + 1) = temp
End If
и код будет правильно работать.
Так он тогда вообще работать станет неверно, ведь максимум и минимум будут выбираться(пусть и неверно), но менять позицию в массиве будет лишь минимум, а с максимумом ничего не будет происходить.
dimas6000 вне форума Ответить с цитированием
Старый 25.12.2013, 15:38   #4
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

достаточно менять только минимумы. большие числа автоматический будут переброшены в конец. а вы пробовали как я сказал?
roborrr вне форума Ответить с цитированием
Старый 25.12.2013, 18:06   #5
dimas6000
Новичок
Джуниор
 
Регистрация: 23.12.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от roborrr Посмотреть сообщение
достаточно менять только минимумы. большие числа автоматический будут переброшены в конец. а вы пробовали как я сказал?
Да, пробовал как вы говорили. Менять лишь минимумы мне недостаточно, ибо это тогда будет сортировка выбором с поиском минимума, а по условию задания необходимо искать одновременно и минимум, и максимум.
dimas6000 вне форума Ответить с цитированием
Старый 25.12.2013, 19:25   #6
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

в восьмом строке кода, Max = n - i + 1 замените на Max = i . то есть поиск и максимума и минимума начните с одинаковой позиции.
roborrr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка вставками HailMe Паскаль, Turbo Pascal, PascalABC.NET 0 30.09.2013 06:11
Сортировка вставками empty space Паскаль, Turbo Pascal, PascalABC.NET 4 25.03.2013 15:56
Сортировка-ВСТАВКАМИ sher_man Помощь студентам 0 15.04.2011 08:03
Сортировка вставками blind0482 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.12.2009 13:15
Сортировка вставками Pti44ka Помощь студентам 3 17.11.2009 16:49