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

Вниз

Сортировка   Найти похожие ветки 

 
stany   (2002-10-28 11:22) [0]

Извиняюсь за глупый вопрос,но с утра долблюсь такая ерудна не получается!:-(
Проблема вот в чем,нужно реализовать следующий алгоритм сортировки:Просматривая массив от 1-го эл-та найти минимальный эл-т и поместить его на место первого элемента,а первый на
место минимального;Просматривая массив от 2-го эл-та...
В итоге должен получится массив,отсортированный по возрастанию(1 2 3 ...).Привожу код моей попытки реализовать эту сортировку,извиняюсь за экибанистость кода.Помогите кто может,
заранее благодарен.
procedure TForm1.Select_Sort;
const
size=5;

var
b:array[1..size] of Integer;
i:integer;//индекс для ввода массива
k,count:integer;
next:integer;
buf:integer;//буфер для обмена элементов массива
min:integer;
begin
for i:=1 to size do
b[i]:=StrToInt(StringGrid1.Cells[i-1,0]);
count:=0;
i:=1;
repeat
min:=i;
next:=i+1;
repeat
if b[next]< b[min] then min:=next;
buf:=b[i];
b[i]:=b[min];
b[min]:=buf;
next:=next+1;
until next>size;
if next>size then
begin
inc(i);
if count=0 then Memo1.Lines.Clear;
if count>=0 then Memo1.Lines.Add("");
for k:=1 to size do
Memo1.Lines[count]:=Memo1.Lines[count]+(IntToStr(b[k]));
inc(count)
//5 вышестояших строк выводят эл-ты массива в одну строку,
//новая линия добавляется при новом выводе
end
until i>size-1;
Memo1.Lines.Add("Массив отсортирован");
end;


 
BOA_KAA   (2002-10-28 11:47) [1]

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

for i:=1 to size-1 {это же size?:-)} do
begin
min:=b[i];
for j:=i+1 to size do
if min > b[j] then
begin
buf:=min;
min:=b[j];
b[j]:=buf;
end;
end;


Вроде должно работать:-))


 
Alx2   (2002-10-28 12:02) [2]

Если буквально следовать заданию, то так, например :)

procedure Sort(var A: array of Integer);

function minimum(Start: Integer): Integer;
var K: Integer;
begin
result := Start;
for K := Start + 1 to High(A) do
if A[K] < A[result] then result := K;
end;

procedure exchange(idx1, idx2: Integer);
var tmp: Integer;
begin
if A[idx1] > A[idx2] then
begin
tmp := A[idx1];
A[idx1] := A[idx2];
A[idx2] := tmp;
end;
end;

var K: Integer;
begin
for K := Low(A) to High(A) do exchange(K, minimum(K + 1));
end;

// Пример
var A: array[1..10] of Integer;
K: Integer;
begin
for K := 1 to 10 do A[K] := random(10);
Sort(A);
for K := 1 to 10 do Memo1.Lines.Add(IntToStr(A[K]));
end;




 
stany   (2002-10-28 12:36) [3]

Спасибо всем большое!



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

Форум: "Основная";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
3-21360
OlegID
2002-10-21 14:31
2002.11.07
периодические значения записи...


1-21580
Help_with_delphi
2002-10-30 07:52
2002.11.07
вот как мне длл ку в дельфях правильно прикрутить ?


14-21765
dim-
2002-10-18 01:09
2002.11.07
IBExpert


3-21455
Robby
2002-10-21 14:11
2002.11.07
Щелчок правой кнопкой на DBGrid


3-21450
b-Ars
2002-10-16 12:19
2002.11.07
Блокировки записей в многопользовательском режиме





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский