Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.11.2012, 23:40
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию Сортировка массивов

Дорого времени суток. Так как новичок в делфи, много еще не знаю. Пишу курсовую и там есть задание: используя рендом перемешать элементы массива перемешать массив. Это как? Массив у меня на 100 элементов.

попутно подскажите как сортировать массив слитием и пузырьковой сортировкой или поделитесь ссылкой
Ответить с цитированием
  #2  
Старый 04.11.2012, 23:48
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

клац
456789
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 04.11.2012, 23:57
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию

то есть я должен показать код сия творения разума моего чтоб задавать вопросы, точнее искать подсказок на допущены мной ошибки, да бы найти ответ? а не попросить помощи в трудную минуту поиска?

З.Ы. Гугл не все может рассказать или объяснить =)
Ответить с цитированием
  #4  
Старый 05.11.2012, 00:04
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Рассказать и объяснить - пожалуйста. А за готовым кодом - не в этот раздел.

В курсовых работах редко дают что-то, что не давали в программе обучения. Тем более, задача элементарная. Так что резонно замечание "надо было на лекции ходить, а не по beer & girls шляться".

P.S. Литература по Delphi.
P.P.S. Честно, мне не сложно. Просто потом студенты-программисты получают дипломы и идут работать по специальности, а программировать не умеют. И очень сильно удивляются, когда их пинками выгоняют из фирмы. Так что для твоего же блага стараемся
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 05.11.2012, 00:06
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Nevil_White
то есть я должен показать код сия творения разума моего чтоб задавать вопросы, точнее искать подсказок на допущены мной ошибки, да бы найти ответ? а не попросить помощи в трудную минуту поиска?

З.Ы. Гугл не все может рассказать или объяснить =)
Задание перемешать элементы массива не тянут на курсовую. Разве что на домашнее задание или максимум на контрольную
А алгоритмы сортировки легко ищутся в google и подробно описаны в Википедии:
Ответить с цитированием
  #6  
Старый 05.11.2012, 00:10
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

poli-smen, почисти личку, не могу тебе написать
->
Давай лучше ссылки на LMGTFY. Отлично мотивирует
^
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 05.11.2012, 00:19
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от PhoeniX
poli-smen, почисти личку, не могу тебе написать
Да, что-то быстро у меня личка переполнилась. Нужно наверное попросить Админа увеличить объёмы личных ящиков.
p.s. Немного почистил.
Ответить с цитированием
  #8  
Старый 05.11.2012, 00:19
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию

хах) ок ок, все не так просто, я заочник и программа информатики у меня длилась 2 пары. Да, перемешать и упорядочить массив легко, это одни из функций программы которая задана на курсовой, но при виде кода (примера алгоритма) я попросту теряюсь. я спрашиваю только то чего не могу понять или не могу найти.
Ответить с цитированием
  #9  
Старый 05.11.2012, 00:21
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от Nevil_White
...но при виде кода (примера алгоритма) я попросту теряюсь...
Ну так приведи пример того, в чём ты теряешься, и мы с удовольствием поможем тебе разобраться

Мы не злые. Мы не любим нахлебников, которые хотят только готовый код. Но новичков, тянущихся к знаниям, мы любим, ценим и уважаем
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #10  
Старый 05.11.2012, 00:32
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 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 result

function mergesort(m) - (м) это массив?
Ответить с цитированием
  #11  
Старый 05.11.2012, 00:34
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию

простите люди, я ло* =)

Код:
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  
Старый 05.11.2012, 00:40
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Слияние или сортировка? Немного не туда тебя гугл завел Еще одно доказание что не всем гугл помогает.
Ответить с цитированием
  #13  
Старый 05.11.2012, 00:44
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Сообщение от Nevil_White
[a]http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D 0%BA%D0%B0_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0 %B5%D0%BC[/a] извините забыл
Эт че?
Код:
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  
Старый 05.11.2012, 00:45
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию

Сортировка слиянием. http://ru.wikibooks.org/wiki/%D0%9F%... 8%D0%B5%D0%BC
Ответить с цитированием
  #15  
Старый 05.11.2012, 00:46
Nevil_White Nevil_White вне форума
Прохожий
 
Регистрация: 28.10.2012
Адрес: Киев
Сообщения: 27
Версия Delphi: 7
Репутация: 10
По умолчанию

не туда занесло. это код чего?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:34.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025