реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> перебрать массив по возрастанию побыстрее, как это сделать за n циклов AVR?
_Ivan_33
сообщение Feb 17 2010, 11:20
Сообщение #1


fpga designer
****

Группа: Свой
Сообщений: 613
Регистрация: 20-04-08
Из: Зеленоград
Пользователь №: 36 928



здравствуйте! есть массив на 32 элемента типа int
нужно поставить их в порядке возрастания микроконтроллером ATmega1280 с тактовой частотой 16 Мгц от кварца
успею ли я простым перебором, сранивая соседние числа и двигая их уложиться в 1100 мкс?


--------------------
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 17 2010, 11:24
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Оптимальный алгоритм требует 2*N циклов сравнения (емнип), где N - количество сортируемых членов
Алгоритм Шелла
Педия


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
_Ivan_33
сообщение Feb 17 2010, 13:45
Сообщение #3


fpga designer
****

Группа: Свой
Сообщений: 613
Регистрация: 20-04-08
Из: Зеленоград
Пользователь №: 36 928



спасибо добрый человек =)


--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 17 2010, 14:56
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(_Ivan_33 @ Feb 17 2010, 11:20) *
массив на 32 элемента типа int нужно отсортировать в порядке возрастания

Я делал сортировку таким образом.

0. Номер массива i=1

1. Для i-го элемента простым перебором находится максимум от (i+1)-го элемента массива до N-го.

2. Максимум сравнивается с i-м элементом и меняется их местами, если второй больше.

3. i=i+1

4. п.1-п.3 повторяются до i=N

За 17600 тактов спокойно можно отсортировать. Чтобы убыстрить процесс, можно разбить массив пополам, отсортировать каждую половину, затем слить вместе.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Xenia
сообщение Feb 17 2010, 15:33
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Можно еще быстрее smile.gif. Только для этого надо сразу класть числа на нужное место, раздвигая ранее положенные. Типа того, как солдат ищет себе место в строю. Причем можно съэкономить циклы, если не сравнивать новое число со всеми прежде лежащими в массиве, а принимать во внимание, что этот массив всегда упорядочен. Т.е. солдат сначала тыкается в середину строя, сравнивая свой рост со стоящим в середине. Взависимости от этого сравнения, сразу отбрасывается половина ряда, с которой сравниваться нет необходимости. Дальше он тыкается в середину соответствующего полуряда, потом четвертьряда и т.д. В результате чего найдет свое место за не более log2(N) сравнений.
Go to the top of the page
 
+Quote Post
ASN
сообщение Feb 17 2010, 16:12
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



_Ivan_33
Посмотрите qsort из <stdlib.h>.
Go to the top of the page
 
+Quote Post
dch
сообщение Feb 17 2010, 16:27
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



слияние отсортированных массивов, правда тебуется двукратный объем памяти или индекса, сначал у Вас размер массивчика 1 а пар массивов 16, а в конце одна пара массивов, а размер массива 16 и туда сюда гоняете

Сообщение отредактировал dch - Feb 17 2010, 16:29
Go to the top of the page
 
+Quote Post
rezident
сообщение Feb 17 2010, 16:56
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



ИМХО Xenia забыла упомянуть, что для ее способа желательно иметь второй буфер. В противном случае "сразу класть числа на нужное место" вступает в противоречие с "раздвигая ранее положенные".
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 02:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016