Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для 5pliT

Новый участник


Сообщения: 21
Благодарности: 9

Профиль | Отправить PM | Цитировать


Здесь нет третей переменной, поэтому я и использовал этот алгоритм.
Можно расписать его как последовательность операций:
in[i]=in[i]^in[j];
in[j]=in[j]^in[i];
in[i]=in[i]^in[j];
^ - это xor (математики называют эту операцию "исключающее ИЛИ" или "сумма по модулю 2" или "кольцевая сумма")
0^0=0
0^1=1
1^0=1
1^1=0

например a=5,b=7;
a=101
b=111
a=a xor b
a=101 xor 111=010=2
b=b xor a
b=111 xor 010=101=5=a (первоначальное)
a=a xor b
a=010 xor 101=111=7=b (первоначальное)


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

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

Последний раз редактировалось 5pliT, 02-01-2008 в 07:57. Причина: Добавлено по алгоритму обмена, исправлены ошибки

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:48, 02-01-2008 | #7