Просьба помочь с сортировкой массива по убыванию

Здравствуйте, уважаемые форумчане. Решаю задачу: Для одномерного массива размерностью 10 упорядочить все его элементы в порядке убывания.Т.е. ввожу: 1 2 3 4 5 6 7 8 9 10А в результате упорядочивания у меня получается: 4 3 2 10 9 8 7 6 5 4 3 2 Подскажите, пожалуйста, что не так в программе ?Код привожу:
procedure TForm1.Button1Click(Sender: TObject);
 
 var
 a:array[1..10] of integer;
 k,i:integer;
 changed:boolean;
 buf:integer;
begin
 for i:=1 to 10 do
 a[i]:=StrToInt(StringGrid1.Cells[i-1,0]);
 repeat
 changed:=false;
 for i:=1 to 10 do
 if a[i]<a[i+1] then begin
 buf:=a[i];
 a[i]:=a[i+1];
 a[i+1]:=buf;
 changed:=true;
 end;
 for i:=1 to 10 do
 Memo1.Lines.Add(IntToStr(a[i])) ;
 until not changed;
 
end;
6 ответов

Сортировка методом пузырька:
procedure TForm1.Button1Click(Sender: TObject);
 var
 a:array[1..10] of integer;
 r,i,j:integer;
begin
for i:=2 to 10 do
 for j:=i to 10 do
 if a[j-1]>a[j] then
	begin
	 r:=a[j];
	 a[j]:=a[j-1];
	 a[j-1]:=r;
	end;
end;


Недописал еще один цикл:
<b>for j:=1 to 10 do
</b>for i:=1 to 10 do
 if a[i]<a[i+1] then begin
 buf:=a[i];
 a[i]:=a[i+1];
 a[i+1]:=buf;
 changed:=true;
 end;
Читай внимательно про сортир. пузырьком


Большое спасибо, но при вводе всех значений в StringGrid и при нажитаа кнопки Упорядочить" программа выкидывает ошибку is not valid integer value"В компонент StringGrid в10 ячеек вводятся элементы массива. Затем нажимается кнопка "Упорядочить" и элементы массива попадают в компонент Memo в упорядоченном по убыванию порядке.Код всей программы:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Grids;

type
 TForm1 = class(TForm)
 Label1: TLabel;
 StringGrid1: TStringGrid;
 Memo1: TMemo;
 Button1: TButton;
 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
 procedure Button1Click(Sender: TObject);
 
 
 private
 { Private declarations }
 public
 { Public declarations }
 end;

var
 Form1: TForm1;

implementation

uses Math;

{$R *.dfm}



procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg('Вы уверены, что хотите выйти ?',mtConfirmation, [mbYes,mbNo],0)=mrYes then
CanClose:=true
else
CanClose:=false;
end;


procedure TForm1.Button1Click(Sender: TObject);

 var
 a:array[1..10] of integer;
 r,i,j:integer;
 changed:boolean;
 buf:integer;
begin
a[i]:=StrToInt(StringGrid1.Cells[i-1,0]);
 for i:=2 to 10 do
 for j:=i to 10 do
 if a[j-1]>a[j] then
 begin
r:=a[j];
a[j]:=a[j-1];
a[j-1]:=r
end;

 for i:=2 to 10 do
 Memo1.Lines.Add(IntToStr(a[i])) ;


end;



end.
Просьба большая помочь


a[i]:=StrToIntDEF(StringGrid1.Cells[i-1,0],0);


Попробовал, не получилосьВ компонент StringGrid в10 ячеек вводятся элементы массива. Затем нажимается кнопка "Упорядочить" и элементы массива попадают в компонент Memo в упорядоченном по убыванию порядке.Большая просьба, помочь в написании программы


Попробовал, не получилось
Код в студию )