Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка выборкой корня N
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
fynjy
Ув. кодеры, у меня к вам просьба! Помогите с задачей.
Препод задал на лабу написать прогу, которая сортирует массив выборкой корня из N, где N длинна массива.
Облазил что только можно и нашёл прогу которая сортирует таким методом! Но там ограниченые пределы. т.е. длинна массива: 16, корень: 4. Надеялся прокатит. Не прокатило. Препод сказал что ему надо написать эту прогу через списки. Дальше у меня никаких идей.

В общем есть массив длинной N, достаём корень N и если выходит не целое число, то округляем к большему. Потом делим массив на корень N частей по корень N елементов и (дальше я не могу понять, говорю на пальцах как я понял) сортируем каждую часть так что б меньший елемент наружу вылазил. В общем ахтунг. Кто поможет, того расцелую. :p2:


ЗЫ: облазил факи и поисковик юзал - не нашёл... :/ Помогите плз. 13-го надо сдать, и так завалил уже зачёт...
volvo
Цитата(fynjy @ 9.06.05 22:14)
Препод задал на лабу написать прогу, которая сортирует массив выборкой корня из N, где N длинна массива.

Метод квадратичной выборки... Возьми присоединенный архив, там есть программа kurs-12.pas она работает с массивами длинной до 1600 элементов...
fynjy
Я какраз показывал преподу эту прогу (редактировал ессесно).. он не принял... что делать... понятия не имею...
Altair
а почему не принял?
fynjy
приблизительно: у вас очень ограниченые рамки, корень N выставляется вручную... В общем ему не нравится что прога многое делает не автоматически(эх, вот такой он... дядя Женя.. с факультета Кибернетики, универ Шевченко...) unsure.gif
volvo
Цитата(fynjy @ 10.06.05 17:07)
у вас очень ограниченые рамки, корень N выставляется вручную...

Ничего себе, "ограниченные рамки"!!! 1600 элементов blink.gif
Кстати, чтобы не было претензий по "ручной работе", определение корня тоже можно свалить на компилятор... Вместо этого:
const
SqrtMax = 40;
...
var
B : Array [1..SqrtMax] Of Integer;
W : Array [1..SqrtMax] Of Integer;

работай с "кучей":
type
PSqrtArray = ^sqrtArray;
sqrtArray: array[1 .. (maxint div sizeof(integer))] of integer;
Var
B, W: PSqrtArray;
...
{ в программе: }
GetMem(B, Succ(Trunc(max))*SizeOf(integer));
GetMem(W, Succ(Trunc(max))*SizeOf(integer));

...
{ когда закончил работу - очисть память: }
FreeMem(B, Succ(Trunc(max))*SizeOf(integer));
FreeMem(W, Succ(Trunc(max))*SizeOf(integer));
...

после этого вся разница будет заключаться в том, что вместо B[i] нужно будет разыменовать указатель: B^[i], но зато претензий насчет "мало автоматических действий" не будет... :yes:
fynjy
оооо.. блин.. вот наверно про это он и говорил! volvo, я тебя лублу smile.gif)))))))
dice
Volvo, спасибо огромное!!! yes2.gif Случайно набрел на этот форум, мне тоже этим методом сортировать задали!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.