Sıralama üzerine biraz kopyala - yapıştır biraz da mantık kurarak bir şeyler yapmaya çalışıyorum ama bir türlü beceremedim.
2 sorum olacak aşağıdaki kod parçası neden çalışmıyor (Invalid pointer operation veya bunun gibi hata mesajları çıkıyor butona tıkladığımda)
Diğer sorum buradaki 0'dan başlama veya 1'den başlama arasındaki fark nedir?
procedure TForm1.Button1Click(Sender: TObject);
var
dizi: array of Integer;
a,x,y,k,say,degistir: integer;
begin
say:= Listbox1.Items.Count;
SetLength(dizi,say);
for x:=0 to say-1 do begin
dizi[x]:= StrToInt(ListBox1.Items[x]);
end;
for y:=0 to say-2 do begin
for k:=1 to say-1 do begin
if dizi[k] > dizi[k+1] then begin
degistir:= dizi[k];
dizi[k]:= dizi[k+1];
dizi[k+1]:= degistir;
end;
end;
end;
for a:=0 to say-1 do begin
ListBox2.Items.Add(IntToStr(dizi[a]));
end;
end;
end.
Anladığım kadarı sayıları sıralamaya çalışıyorsun listbox içindeki en kolay yol şu bence..
Listbox sayıları ekle fakat eklerken sayıları formatlayarak ekle
eğer en büyük sayı iki basamaklı ise sayısını 01 veya 3 ü 03 diyerek kaydet
eğer en büyük sayın 3 basamaklı ise 0001 diye ekle listbox sonra listbos sort özelliği var onu seçersen tüm sayılar sıralanmış olur...
Eşağıdaki komutu kullanabilirsin mesela
ShowMessage(Format('0 ekle sayıya = <%.6d>', [1234])); bunun çıktısı aşağıda mesela
0 ekle sayıya = <001234>
senin bu kod listbox1 boşken çalışmaz listbox1 a yukardan aşağıya 12345678 sayılarını gir çalıştır 8 i silip 2 sıraya 0 eklediğini görürsün yani bi acaip
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
TListSortCompare = function (Item1, Item2: Pointer): Integer;
procedure QuickSort(SortList: PPointerList; L, R: Integer;
SCompare: TListSortCompare);
var
I, J: Integer;
P, T: Pointer;
begin
repeat
I := L;
J := R;
P := SortList^[(L + R) shr 1];
repeat
while SCompare(SortList^[I], P) < 0 do Inc(I);
while SCompare(SortList^[J], P) > 0 do Dec(J);
if I <= J then
begin
T := SortList^[I];
SortList^[I] := SortList^[J];
SortList^[J] := T;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then QuickSort(SortList, L, J, SCompare);
L := I;
until I >= R;
end;
procedure TtheList.Sort(Compare: TListSortCompare);
begin
if (FList <> nil) and (Count > 1) then
QuickSort(FList, 0, Count - 1, Compare);
end;
type
precord_list=^record_list;
record_list=record
ackCount:integer;
end;
function sort(item1,item2:pointer):integer;
var
list1,list2:precord_list;
begin
list1:=item1;
list2:=item2;
result:=integer(list2^.ackCount) - integer(list1^.ackCount);
end;
In dubio pro reo... Şüpheden sanık/özgürlük yararlanır...