Главная страница
    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.008 c
1-21501
novarm44
2002-10-28 02:24
2002.11.07
Чтение/Запись файла


1-21627
-Alex-
2002-10-26 17:10
2002.11.07
Перехват второй копии и запуск функции.


14-21737
Igorek
2002-10-16 19:50
2002.11.07
Как перекинуть текст из разных HTML файлов в один?


1-21675
AFrolov
2002-10-25 17:15
2002.11.07
как создать свой обработчик и повесить его на событие Timer a


3-21444
Макз
2002-10-19 05:02
2002.11.07
Field description





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