Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Сортировка обменом

Сортировка обменом (или пузырьковая сортировка) - это самый простой способом упорядочить массив чисел, с точки зрения затрат программных ресурсов. Алгоритм пузырьковой сортировки очень прост для понимания и легок в реализации.

Сортировка обменом
Сортировка обменом

Рассмотрим, как работает этот метод с набором из пяти чисел, расположенных случайным образом. Задача пузырьковой сортировки заключается в том, чтобы за каждый просмотр массива выявлять элемент с наименьшим весом. Для этого, в нашем случае, сначала сравниваются числа 1 и 3. Поскольку 1<3, то элементы меняются местами. Далее сравнению подлежат числа 1 и 2 и, так как 1<2, снова происходит их обмена и т.д. Таким образом, самый маленький “пузырек” c весом 1 всплывает в самый верх очереди. Оставшийся неупорядоченный массив из 4-рех элементов (наименьший элемент 1 уже найден) продолжает сортироваться тем же способом.

Подпрограмма пузырьковой сортировки массива 1-байтовых чисел:

 ; Подпрограмма пузырьковой сортировки массива чисел
 ; YH:YL – указатель на элемент массив чисел
 ; R16,R17 – регистры для промежуточных операций
 ; R18 – счетчик итераций сравнения
 ; array – адрес начала массива сортируемых чисел
 ; ASIZE – размер массива (2…256)
 ;   Время сортировки массива из 256 1-байтовых чисел:
 ; обратная последовательность (0…255)  – 524287 циклов
 ; прямая последовательность (255…0)    – 459007 циклов

bubble_sort:
     ldi   R18,ASIZE-1 ;инициализируем счетчик проходов
bs1:	push  R18           ;сохраняем счетчик проходов в стеке
     ldi   YH,high(array) ;заносим в указатель адрес начала
     ldi   YL,low(array)  ;сортируемого массива
bs2:	ld    R16,Y     ;в R16 заносим i элемент массива
    ldd   R17,Y+    ;в R17 заносим i+1 элемент массива
    cp    R16,R17   ;сравниваем элементы i с i+1
    brcc  bs3       ;если элемент с индексом i меньше элемента 
	eor   R16,R17   ;с индексом i+1, то меняем их местами
	eor   R17,R16
    eor   R16,R17
    bs3: st    Y+,R16    ;заносим содержимое R16, R17 в массив
    st    Y,R17
    dec   R18       ;декрементируем счетчик и если нуль
    brne  bs2       ;проход закончен,
    pop   R18       ;то восстанавливаем счетчик проходов и
    dec   R18       ;продолжаем сортировку пока не будут
    brne  bs1       ;упорядочено MEMSIZE элементов
    ret

Интересно отметить, что разница во времени сортировки массивов с прямой и обратной последовательностями элементов (наихудший и наилучший случаи соответственно), очень мала. Это объясняется тем, что операция обмена двух байтов местами потребуют для своего выполнения всего на 2 машинных цикла больше чем программный переход, когда в перестановке нет необходимости. В общем случае стоит ожидать, что пузырьковая сортировка будет работать эффективней с более упорядоченными последовательностями. Если в изначально упорядоченный массив добавляется новый элемент, то понадобится всего один проход для того, чтобы поставить его на свое место.

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
UNI-T UT-61A Raspberry Pi 2
вверх