Форум: "Основная";
Текущий архив: 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.008 c