![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Дорого времени суток. Так как новичок в делфи, много еще не знаю. Пишу курсовую и там есть задание: используя рендом перемешать элементы массива перемешать массив. Это как? Массив у меня на 100 элементов.
попутно подскажите как сортировать массив слитием и пузырьковой сортировкой или поделитесь ссылкой |
|
#3
|
|||
|
|||
|
то есть я должен показать код сия творения разума моего чтоб задавать вопросы, точнее искать подсказок на допущены мной ошибки, да бы найти ответ? а не попросить помощи в трудную минуту поиска?
З.Ы. Гугл не все может рассказать или объяснить =) |
|
#4
|
||||
|
||||
|
Рассказать и объяснить - пожалуйста. А за готовым кодом - не в этот раздел.
В курсовых работах редко дают что-то, что не давали в программе обучения. Тем более, задача элементарная. Так что резонно замечание "надо было на лекции ходить, а не по beer & girls шляться". P.S. Литература по Delphi. P.P.S. Честно, мне не сложно. Просто потом студенты-программисты получают дипломы и идут работать по специальности, а программировать не умеют. И очень сильно удивляются, когда их пинками выгоняют из фирмы. Так что для твоего же блага стараемся ![]() |
|
#5
|
||||
|
||||
|
Цитата:
А алгоритмы сортировки легко ищутся в google и подробно описаны в Википедии: |
|
#7
|
||||
|
||||
|
Цитата:
p.s. Немного почистил. |
|
#8
|
|||
|
|||
|
хах) ок ок, все не так просто, я заочник и программа информатики у меня длилась 2 пары. Да, перемешать и упорядочить массив легко, это одни из функций программы которая задана на курсовой, но при виде кода (примера алгоритма) я попросту теряюсь. я спрашиваю только то чего не могу понять или не могу найти.
|
|
#9
|
||||
|
||||
|
Цитата:
![]() Мы не злые. Мы не любим нахлебников, которые хотят только готовый код. Но новичков, тянущихся к знаниям, мы любим, ценим и уважаем ![]() |
|
#10
|
|||
|
|||
|
я уже был здесь и мне помогали с циклом для задания рендомного числа для массива. и с проблемой по поводу едита. мне довольно таки быстро помогли и дали знаний на последующий шаг, за что я во многом благодарен. Вообще в будущем у меня в планах использовать делфи чтоб объединить бардак у меня на жостком, я просто гитарист больше чем программист и нужно навести порядок в бесконечных сохранены текстах и аккордах с табами. а программу такую не найти, попробую написать ее сам. но сейчас я учусь (хотя живя жизнь мы все время учимся =) ). Ну тогда начнем: Гугл помог, но что-то помощь его не очень понятна, доверие к википедии имеет монополию и вот что я вижу, псевдокод.. хм, хорошо, а на делфи как адаптировать?
Код:
Пример реализации алгоритма простого двухпутевого слияния на псевдокоде:
function mergesort(m)
var list left, right, result
if length(m) ≤ 1
return m
else
middle = length(m) / 2
for each x in m up to middle
add x to left
for each x in m after middle
add x to right
left = mergesort(left)
right = mergesort(right)
result = merge(left, right)
return result
end if
Есть несколько вариантов функции merge(), наиболее простой вариант может выглядеть так:
function merge(left,right)
var list result
while length(left) > 0 and length(right) > 0
if first(left) ≤ first(right)
append first(left) to result
left = rest(left)
else
append first(right) to result
right = rest(right)
end if
if length(left) > 0
append left to result
if length(right) > 0
append right to result
return resultfunction mergesort(m) - (м) это массив? |
|
#11
|
|||
|
|||
|
простите люди, я ло* =)
Код:
unit uMergeSort;
interface
type
TItem = Integer; //Здесь можно написать Ваш произвольный тип
TArray = array of TItem;
procedure MergeSort(var Arr: TArray);
implementation
function IsBigger(d1, d2 : TItem) : Boolean;
begin
Result := (d1 > d2); //Сравниваем d1 и d2. Не обязательно так. Зависит от Вашего типа.
//Сюда можно добавить счетчик сравнений
end;
//Процедура сортировки слияниями
procedure MergeSort(var Arr: TArray);
var
tmp : TArray; //Временный буфер // А где реализация процедуры? Этот код работать не будет, допишите, пожалуйста \
//Слияние объясните ибо тупой =)
procedure merge(L, Spl, R : Integer); /
var
i, j, k : Integer;
begin
i := L;
j := Spl + 1;
k := 0;
//Выбираем меньший из первых и добавляем в tmp
while (i <= Spl) and (j <=R) do
begin
if IsBigger(Arr[i], Arr[j]) then
begin
tmp[k] := Arr[j];
Inc(j);
end
else
begin
tmp[k] := Arr[i];
Inc(i);
end;
Inc(k);
end;
//Просто дописываем в tmp оставшиеся эл-ты
if i <= Spl then //Если первая часть не пуста
for j := i to Spl do
begin
tmp[k] := Arr[j];
Inc(k);
end
else //Если вторая часть не пуста
for i := j to R do
begin
tmp[k] := Arr[i];
Inc(k);
end;
//Перемещаем из tmp в arr
Move(tmp[0], Arr[L], k*SizeOf(TItem));
end;
//Сортировка
procedure sort(L, R : Integer);
var
splitter : Integer;
begin
//Массив из 1-го эл-та упорядочен по определению
if L >= R then Exit;
splitter := (L + R) div 2; //Делим массив пополам
sort(L, splitter); //Сортируем каждую
sort(splitter + 1, R); //часть по отдельности
merge(L, splitter, R); //Производим слияние
end;
//Основная часть процедуры сортировки
begin
SetLength(tmp, Length(Arr));
sort(0, Length(Arr) - 1);
SetLength(tmp, 0);
end;
end.ну или просто подскажите куда мне впихнуть мой готовый массив А =) Последний раз редактировалось Nevil_White, 05.11.2012 в 00:42. |
|
#12
|
||||
|
||||
|
Слияние или сортировка? Немного не туда тебя гугл завел
Еще одно доказание что не всем гугл помогает. ![]() |
|
#13
|
||||
|
||||
|
Цитата:
Код:
procedure randomizearray(var arr:array of integer); var i,j, l:Integer; procedure exchange(var _arr:array of integer; const a1, a2:integer); var i:integer; begin i:=_arr[a1]; _arr[a1]:=_arr[a2]; _arr[a2]:=i; end; begin randomize; l:=high(arr) - low(arr); for i:=low(arr) to high(arr) do begin j:=low(arr) + random(l); exchange(arr, i, j); end; end; |
|
#14
|
|||
|
|||
|
Сортировка слиянием. http://ru.wikibooks.org/wiki/%D0%9F%... 8%D0%B5%D0%BC
|
|
#15
|
|||
|
|||
|
не туда занесло. это код чего?
|