Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/131: Рейтинг темы: голосов - 131, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 28.05.2011
Сообщений: 6

Сортировка массива пузырьком

30.05.2011, 15:58. Показов 27433. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Прошу помощи. Не могу разобраться как отсортировать одномерный массив mas[n], n =12.
Метод сортировки пузырьком по убыванию.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.05.2011, 15:58
Ответы с готовыми решениями:

Сортировка массива пузырьком
Написать программу сортировки массива пузырьком, елементы массива вводить с клавиатуры, количество элементов 18, отсортированный массив...

Сортировка пузырьком
Нужно реализовать сортировку пузырьком для последовательности байт. Но почему то он сравнивая числа 4 и 1 все равно записывает 4 в первую...

Сортировка пузырьком FASM
Добрый вечер форумчане. У меня вот какой вопрос , я вывожу массив до и после сортировки до сортировки 54321 а после 23456 =/ хех.....

13
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
30.05.2011, 17:12
Лучший ответ Сообщение было отмечено как решение

Решение

Assembler
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
cseg segment
assume cs:cseg,ds:dseg
start:  mov ax,dseg
    mov ds,ax
 
cntn:   xor si,si
    mov cx,n
    dec cx
    mov dl,1    
sort:   mov al,array[si]
    cmp al,array[si+1]
    jnl nxt
    xchg al,array[si+1]
    mov array[si],al
    xor dl,dl   ;обмен был, обнуляем dl
nxt:    inc si
    loop sort
    or dl,dl    ;если dl=1, элементы не менялись, на выход
    jz cntn 
 
    mov ax,4c00h
    int 21h
cseg ends
dseg segment
 
array db 3,15,125,4,67,1,8,-43,56,7,22,8
n=$-array
 
dseg ends
 
sseg segment stack
 
db 256 dup(0)
 
sseg ends
 
end start
5
0 / 0 / 0
Регистрация: 28.05.2011
Сообщений: 6
30.05.2011, 21:03  [ТС]
огромное спасибо
0
0 / 0 / 0
Регистрация: 28.05.2011
Сообщений: 6
06.06.2011, 23:22  [ТС]
А как вывести на экран результат этой программы?
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
07.06.2011, 00:21
Вставьте вот этот кусок после 19 строки:
Assembler
1
2
3
4
5
6
7
8
9
    mov si,offset array
    mov cx,n
outpt:  xor ax,ax
    lodsb
    call OutInt
    mov ah,02h  ;отделим выводимые числа пробелами
    mov dl,' '
    int 21h
    loop outpt
Процедуру OutInt возьмите отсюда. Не забудьте в ней сохранить и восстановить используемые регистры.
1
 Аватар для zzzyyyxxx
768 / 312 / 11
Регистрация: 27.05.2011
Сообщений: 703
07.06.2011, 06:07
чёт я не пойму, Ant1971on можешь объяснить, каким таким "пузырьком"?
как я понял, представленная тобой программа, просто упорядочивает по убыванию.
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
07.06.2011, 09:37
zzzyyyxxx, тут без "пузырька" не разберешься Сортировка идет в несколько проходов. Сравниваются соседние числа, если число с меньшим индексом меньше соседнего с большим индексом, то они меняются местами. За каждый проход минимальное число "всплывает" в конец массива. Число проходов зависит от степени неупорядоченности массива. Сортировка завершается, если в предыдущий проход не было обмена между соседними позициями в массиве.
1
 Аватар для zzzyyyxxx
768 / 312 / 11
Регистрация: 27.05.2011
Сообщений: 703
07.06.2011, 11:38
[тут без "пузырька" не разберешься]
а, вот оно чё.
спасибо, учту на будущее.
0
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 4
10.06.2011, 00:27
а можно весь код вывода???и куда вставлять???
я чайник))

Добавлено через 44 секунды
Цитата Сообщение от Ant1971on Посмотреть сообщение
Вставьте вот этот кусок после 19 строки:
Code
1
2
3
4
5
6
7
8
9
    mov si,offset array
    mov cx,n
outpt:  xor ax,ax
    lodsb
    call OutInt
    mov ah,02h  ;отделим выводимые числа пробелами
    mov dl,' '
    int 21h
    loop outpt
Процедуру OutInt возьмите отсюда. Не забудьте в ней сохранить и восстановить используемые регистры.


а можно весь код вывода???и куда вставлять???
я чайник))
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
10.06.2011, 10:17
Вот код целиком:
Assembler
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
cseg segment
assume cs:cseg,ds:dseg
start:  mov ax,dseg
        mov ds,ax
 
cntn:   xor si,si
        mov cx,n
        dec cx
        mov dl,1        
sort:   mov al,array[si]
        cmp al,array[si+1]
        jnl nxt
        xchg al,array[si+1]
        mov array[si],al
        xor dl,dl       ;обмен был, обнуляем dl
nxt:    inc si
        loop sort
        or dl,dl        ;если dl=1, элементы не менялись, на выход
        jz cntn 
 
    mov si,offset array
    mov cx,n
outpt:  xor ax,ax
    lodsb
    cbw
    call OutInt
    mov ah,02h  ;отделим числа пробелами
    mov dl,' '
    int 21h
    loop outpt  
 
        mov ax,4c00h
        int 21h
 
OutInt proc
    push ax
    push bx
    push cx
    push dx
        
; Проверяем число на знак.
       test    ax, ax
       jns     oi1
 
; Если оно отрицательное, выведем минус и оставим его модуль.
       mov  cx, ax
       mov     ah, 02h
       mov     dl, '-'
       int     21h
       mov  ax, cx
       neg     ax
; Количество цифр будем держать в CX.
oi1:  
        xor     cx, cx
        mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
        xor             dx,dx
        div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
        push    dx
        inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
        test    ax, ax
        jnz     oi2
; Теперь приступим к выводу.
        mov     ah, 02h
oi3:
        pop     dx
        add     dl, '0'
        int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
        loop    oi3
 
    pop dx
    pop cx
    pop bx
    pop ax
        
        ret
 
OutInt endp 
 
cseg ends
dseg segment
 
array db 3,15,125,4,67,1,8,-43,56,7,22,8
n=$-array
 
dseg ends
 
sseg segment stack
 
db 256 dup(0)
 
sseg ends
 
end start
3
0 / 0 / 0
Регистрация: 28.05.2011
Сообщений: 6
10.06.2011, 20:29  [ТС]
Вот код целиком:
22 и 23 строки нужны ли вообще? новичек сильно не ругайте)
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
10.06.2011, 20:59
Дальше там идет команда lodsb, которая загружает байт из массива array. Вот для нее и нужна 22 строка, в si должен быть адрес начала массива. А в 23 строке в счетчик загружается число выводимых символов.Но можно обойтись и без lodsb:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
    ...
    mov cx,n
    xor si,si
outpt:  mov al,array[si]
    cbw
    call OutInt
    mov ah,02h  
    mov dl,' '
    int 21h
    inc si
    loop outpt
    ...
А в прежнем варианте действительно есть лишняя команда: xor ax,ax в 24 строке.
2
0 / 0 / 0
Регистрация: 28.05.2011
Сообщений: 6
11.06.2011, 21:00  [ТС]
ясно, спасибо!
0
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
23.06.2011, 16:40
Скажите, пожалуйста, а что эти 2 строки делают? они принципиально нужны?

cseg segment
assume cs:cseg,ds:dseg
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2011, 16:40
Помогаю со студенческими работами здесь

Сортировка пузырьком на VC++ с использованием директивы _asm
Всем привет, надеюсь, разделом не ошибся. Дело в том, что у меня только вставка на ассемблере при помощи директивы _asm. Вроде всё...

[NASM] Сортировка пузырьком
arr db 1,2,9,8,6,4,3,5,7,0 n db 10 start: lea bx,arr mov cx,9 cyc1: push cx

Сортировка пузырьком: подробно разобрать код
Доброго времени суток. Ассемблер я начал изучать недавно, хотелось бы на примере разобраться в том, что именно значат команды (желательно...

Сортировка массива пузырьком
Здравствуйте! Нужен код сортировки массива пузырьком. Сначала на экран выдаётся сообщение с выбором сортировки, по типу: Нажмите 1,...

Сортировка массива пузырьком
помогите исправить код задание. вводится список записей формата: Отправитель - Получатель «текст» дата где адреса отправителя и...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru