Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

Что это за алгоритм? Help! Завтра экзамен.   Найти похожие ветки 

 
Maximsms   (2006-01-15 19:44) [0]

Препод давал моим коллегам некий алгоритм быстрой сортировки,
помогите распознать!

см тут: http://qdb.ru/unknown_quick_sort.gif


 
TUser ©   (2006-01-15 19:48) [1]

Книжка акая-нибудь по алгоритмам рядом валяется? А то, что там на этой мукулатуре написано, можно разобрать только зная алгоритм :))


 
Maximsms   (2006-01-15 19:49) [2]

TUser ©   (15.01.06 19:48) [1]

в том то и беда. что не нахожу я в книжке такого алгоритма.
классичекий алгоритм быстрой сортировки - другой.


 
isasa ©   (2006-01-15 19:51) [3]

Мда, это на заборе нарисовано?
Растет интелект населения.
Из быстрых в голову приходит - пузырьковая.


 
Desdechado ©   (2006-01-15 19:55) [4]

пузырек - самый медленный

а вообще алгоритмов сортировки - десятки


 
Maximsms   (2006-01-15 19:59) [5]

isasa ©   (15.01.06 19:51) [3]

пузырёк тут не в тему.

это какой-то быстрый алгоритм.


 
Maximsms   (2006-01-15 20:00) [6]

это не на заборе нарисовано это я просканировал сделанное задание,
за которое поставлен плюс.


 
TUser ©   (2006-01-15 20:01) [7]

сотни

А на бумажке этой они похоже использовали что-то типа

while A[i] < Middle do inc (i);
Swap;
while A[j] > Middle doe dec (j);
Swap;

Видишь там одна из переставляемых цифр - такая же, как в прошлый раз. Конечно, это менее оптимально.


 
ferr ©   (2006-01-15 20:01) [8]


> это не на заборе нарисовано это я просканировал
>сделанное задание,
> за которое поставлен плюс.

:-)


 
TUser ©   (2006-01-15 20:02) [9]

Есть мнение, что плюс поставили зря.


 
YurikGL ©   (2006-01-15 20:07) [10]

Берем перовое число, сравниваем с последним. Если больше, то меняем местами, если меньше то сравниваем с предпоследним...
Если произошла замена, то начинаем заново (вроде)


 
YurikGL ©   (2006-01-15 20:09) [11]

нее...в > YurikGL ©   (15.01.06 20:07) [10] фигню написал...
с конца там идет перебор....


 
Yegorchic ©   (2006-01-15 20:20) [12]

Это в C++ ещё есть целая функция QuickSort. Сейчас посмотрю - у меня вроде где-то было описание, алгоритм и всё такое...


 
Maximsms   (2006-01-15 20:24) [13]

это не quicksort!!!!!!!
c quicksort я знаком, это нечто другое.

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


 
Yegorchic ©   (2006-01-15 20:24) [14]

Использование “стандартных” алгоритмов сортировки одномерных массивов.
Во всех примерах, относящихся к одномерным массивам, будем использовать следующий тип данных: type list=array[1..N] of <скалярный тип>;
Конкретный тип элемента в большинстве описываемых алгоритмов может быть как любым числовым, так и символьным или даже строковым. Последний тип скалярным не является, но к элементам этого типа применимы все операции сравнения, с помощью которых обычно (но не всегда !!!) и производится сортировка.
Пусть в задаче данные необходимо отсортировать один раз. Тогда выбирать следует тот из известных вам алгоритмов сортировки, на реализацию которого лично у вас уйдет меньше всего времени и отлаживать который тоже не придется. В таком случае ребята обычно реализуют так называемый “пузырьковую” сортировку или сортировку прямым выбором. Конечно, размерность массива при этом должна быть не намного более 1000 элементов, в противном случае время работы программы может оказаться неоправданно большим, так как количество только операций сравнения у обоих упомянутых алгоритмов равно N(N — 1)/2.
Если же размерность массива велика или сортировку требуется проводить на каждом шаге некоторого цикла, то проще всего использовать алгоритм так называемой “быстрой” сортировки [1-4]. Этот алгоритм на практике выполняется за не более Nlog2N операций сравнения и зачастую еще меньшее число операций присваивания, хотя теоретическая оценка для худшего случая является квадратичной по N. В языке программирования C он реализован в виде функции qsort, входящей в библиотеку stdlib. В полной поставке среды программирования Турбо Паскаль данный алгоритм можно найти в файле EXAMPLES\DOS\qsort.pas. Нередко приведенный в указанном файле текст процедуры сортировки не требуется изменять вообще, но иногда незначительные переделки необходимы, поэтому полезно разобраться в особенностях данной реализации алгоритма сортировки. Рассмотрим возможную модификацию этой процедуры, выполненную для задачи Кировской открытой командной олимпиады по программированию 2001 г. “Предусмотрительное жюри”.
{задача}
В командных соревнованиях по программированию временем решения задачи считается время в минутах от начала тура до момента посылки правильного решения этой задачи на проверку. Жюри старается расположить задачи в таком порядке, чтобы для команды, решившей по порядку все задачи общее время решения было максимальным, если ориентировочное время, которое требуется потратить на решение каждой из задач известно. В самом деле, если на тур предлагается две задачи, и на решение первой команда тратит 10 минут, а на решение второй — 20, то время решения будет равно 40 минутам (первую задачу команда сдает на 10-й минуте тура, вторую — на 30-й, 10+30=40). Если же задачи расположить в обратном порядке, то время будет равно 50 (задачи будут сданы на 20-й и 30-й минутах). Помогите членам жюри расположить задачи в желаемом порядке.
{\задача}
Очевидно, что задачи следует предлагать в порядке невозрастания ожидаемых временных затрат на каждую из них. То есть требуется произвести сортировку временных характеристик имеющихся задач и переставить согласно полученному порядку исходные номера задач. Проще всего делать это одновременно, незначительно модифицируя стандартную процедуру (изменения, внесенные в реализацию алгоритма сортировки, выделены жирным шрифтом):

const nn=…{максимальное количество задач};
type rr=record t,k:integer; end;      list=array[1..nn] of rr; var time:list;     i,n:integer;
procedure QuickSort(var a: List; Lo, Hi: Integer);
procedure Sort(l, r: Integer);
var
 i, j, x: integer;
 y: rr;
begin
 i := l; j := r; x := a[(l+r) DIV 2].t;
 repeat
   while a[i].t > x do i := i + 1;
   while x > a[j].t do j := j - 1;
   if i <= j then
   begin
     y := a[i]; a[i] := a[j]; a[j] := y;
     i := i + 1; j := j - 1
   end
 until i > j;
 if l < j then Sort(l, j);
 if i < r then Sort(i, r)
end;
begin {QuickSort};
 Sort(Lo,Hi)
end;
begin {решение задачи с помощью модифицированной процедуры QuickSort}   read(n);   for i:=1 to n do
 begin
   read(time[i].t);
   time[i].k:=i
 end;
 QuickSort(time,1,n);
{сортировали по временам, а печатаем индексы}   for i:=1 to n do     write(time[i].k:8)
end.

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


 
Yegorchic ©   (2006-01-15 20:25) [15]

Maximsms, не увидел сообщения. Извиняюсь.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.012 c
1-1136332293
JazY
2006-01-04 02:51
2006.02.05
Как отобразить Excel файл в своей программе?


4-1132571869
MTsv DN
2005-11-21 14:17
2006.02.05
Удержание кнопки мыши и кнопки...


15-1137056416
Хинт
2006-01-12 12:00
2006.02.05
Проблема с FTP


1-1136640439
01
2006-01-07 16:27
2006.02.05
Защита ресурсов программы


1-1136582035
Dunpeal
2006-01-07 00:13
2006.02.05
Картинки в RxRichEdit (не добавление)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский