|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Быстрая сортировка |
|
||||
|
|
Быстрая сортировка
|
|
Студент Сообщения: 445 |
Идея метода заключается в следующем: выбираем в массиве произвольный элемент и ставим его "на своё место". Все элементы меньшие выбранного должны оказаться слева, а больше справа. И потом просто вызываем рекурсивную процедурку, которая аналогичным образом отсортирует левую и правую части массива.
Пример кода: procedure swap(var a, b : integer);
var
*c : integer;
begin
*c := a;
*a := b;
*b := c;
end; *{Это просто процедурка, которая меняет местами значения A и B}
procedure sort(l, r : integer);
var
*Y, j, x : integer;
begin
*Y := l;
*j := r; {с помощью указателей Y и J мы будем "двигаться по массиву"}
*x := a[(l + r) div 2]; {выбрали произвольный элемент. Например из серединки}
*repeat
* *while (a[Y] < x) do inc(Y); {Двигаем левый указатель до близжайшего элемента, большего X}
* *while (a[j] > x) do dec(j); {Двигаем правый указатель до близжайшего элемента, меньшего X}
* *if Y <= j then begin
* * *swap(a[Y], a[j]);
* * *inc(Y);
* * *dec(j);
* *end; {поменяли элементы местами, сдвинули указатели}
*until Y > j;
*if Y < r then sort(Y, r);
*if j > l then sort(l, j);
end;
Праверьте ещё раз, правильно ли работает... Если что - стучите ![]() [Гневные ругательства в адрес BigMac-а] Кстати говоря... Паскалевское обращение к элементу массива вида A[W], где вместо "W" стоит "I" твой форум распознал как открытие тэга... Сделай примочку, которая в тэге CODE игнорирует все другие тэги... [/Гневные ругательства в адрес BigMac-а] (Отредактировал(а) noname00.pas - 10:06 8-01-2002) |
|
|
------- Отправлено: 12:56, 08-01-2002 |
|
Призрачный админ Сообщения: 5256
|
Профиль | Отправить PM | Цитировать noname00.pas
Понял..... он распознал его как косой шрифт.......гляну..... ![]() |
|
------- Отправлено: 13:54, 08-01-2002 | #2 |
|
Пользователь Сообщения: 6
|
Профиль | Отправить PM | Цитировать noname00.pas
Вау! Круто! А на сколько быстрее она работает. А то зачем ее писать если я и пузырьком могу отсортить ![]() |
|
Отправлено: 14:37, 08-01-2002 | #3 |
|
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать BluesBrother
В худшем случае (при специально подобранных данных) она работает за O(N*N) операций. Но вероятность выпадения именно таких данных на достаточно больших массивах ничтожна мала, поэтому в общем случае кол-во операций можно оценивать как O(N*log(N)). В среднем этот алгоритм работает быстрее, чем HeapSort, Шелл и прочие алгоритмы сложности O(N*log(N)) (Отредактировал(а) noname00.pas - 11:46 8-01-2002) |
|
------- Отправлено: 14:45, 08-01-2002 | #4 |
|
Мичуринский ученик Сообщения: 740
|
Профиль | Отправить PM | Цитировать noname00.pas
![]() |
|
|
------- Отправлено: 07:25, 09-01-2002 | #5 |
|
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
|
|
|
------- Отправлено: 09:43, 08-02-2002 | #6 |
|
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать ivank
А если програмка уже написана, а я её через буффер обмена сюда вставляю? :Р |
|
------- Отправлено: 13:04, 09-02-2002 | #7 |
|
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать noname00.pas
существует такая штука как "Поиск и замена". Открываешь блокнот, и проводишь в нём эту архисложную операцию со своей прогой ![]() |
|
------- Отправлено: 17:55, 09-02-2002 | #8 |
|
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать ivank
Проще один раз исправить скрипт, чем каждый раз открывать блокнот. ![]() |
|
------- Отправлено: 23:23, 10-02-2002 | #9 |
|
изверг Сообщения: 39
|
Профиль | Сайт | Отправить PM | Цитировать std::sort :>
Кнута почитайте-с, - не знаснёте - много нового узнаете |
|
------- Отправлено: 22:03, 03-03-2002 | #10 |
|
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| HDD - быстрая проверка USB-HDD? | Antoniooo | Накопители (SSD, HDD, USB Flash) | 2 | 21-10-2008 12:17 | |
| Быстрая смена сетевых настроек | PERMYAK | Сетевые технологии | 4 | 20-05-2007 16:15 | |
| W2K3+ быстрая смена пользователей | Gudvin | Microsoft Windows NT/2000/2003 | 1 | 05-02-2007 08:58 | |
| Недостаточно быстрая работа компьютера | Vadeneev | Хочу все знать | 5 | 28-09-2004 09:32 | |
| Быстрая перезагрузка | Guest | Microsoft Windows 95/98/Me (архив) | 5 | 24-12-2002 21:54 | |
|