elimizde 1 den 1000 e kadar sayılar var ama sayıların yeri karşık (1,2,5,50,44,45,60,75,11....) bu sayıları (1-5, 10-15, ...) bu şekilde belli aralıkta
dizilere atan bir algoritma en küçük sayıdan başlayarak 2,3,4,5 var mesela bunu 2-5 yazacak daha sonra gelen sayı dizi 10,11,12,13,14,15 bunu da 10-15 yazacak.
sonuç 2-5, 10-15 , 20-22 , 45-48 .. bu şekilde bir algoritma fikri olan?
Karışık sayıyı sıralayıp gruplama algoritması
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Karışık sayıyı sıralayıp gruplama algoritması
Mücadele güzelleştirir!
Re: Karışık sayıyı sıralayıp gruplama algoritması
normalde aklıma bir çok yöntem geliyo ama en zahmetsizi bana göre eğer vt kullanıyosan, gelen verileri bir tabloda bir alana basar, asc ve desc yardımı ile geri çekerdim...
ama yok vt kullanmıyosan en kolay yine array kullanarak yaparsın. heleki değerler misal 1-1000 arasında 30 tane değer gelecekse iş iyice kolaylaşır.. Delphinin matematiksel fonksiyonlarınada bir göz at derim mutlaka işe yarar bişey bulursun..
ama yok vt kullanmıyosan en kolay yine array kullanarak yaparsın. heleki değerler misal 1-1000 arasında 30 tane değer gelecekse iş iyice kolaylaşır.. Delphinin matematiksel fonksiyonlarınada bir göz at derim mutlaka işe yarar bişey bulursun..
Re: Karışık sayıyı sıralayıp gruplama algoritması
bi kac tane sıralama algoritması mevcut bunun icin
bunları söyleyim sana
1- selection sort
2-quiksort
3-mergesort
aklıma gelenler bunlar bu algortimalar calısma zamanları bakımından birbirinden farklıdır eldeki verine gore zaman karmasıklıgını degistirirsin.
selection sor en basitidir. mantıgı dizi icindeki 1. elemanı alır 2. ile karsılartır büyüklük kücüklük durumuna göre yer degistirir bu sekilde istedigin sıralamayı yaparsın.
sana bunun kodlarınıda yazarım buraya ama muhtemelen bu sana verilen odevdir. sen simdi burdan bunu kopyala yapıstır yaparsın. ve bilgi anlamında sana hic birsey kazandırmaz. bu selection sortu incele sözde kod ile buraya yaz sana kodlarını vereyim en azından mantıgını anlamıs olursun.
bunları söyleyim sana
1- selection sort
2-quiksort
3-mergesort
aklıma gelenler bunlar bu algortimalar calısma zamanları bakımından birbirinden farklıdır eldeki verine gore zaman karmasıklıgını degistirirsin.
selection sor en basitidir. mantıgı dizi icindeki 1. elemanı alır 2. ile karsılartır büyüklük kücüklük durumuna göre yer degistirir bu sekilde istedigin sıralamayı yaparsın.
sana bunun kodlarınıda yazarım buraya ama muhtemelen bu sana verilen odevdir. sen simdi burdan bunu kopyala yapıstır yaparsın. ve bilgi anlamında sana hic birsey kazandırmaz. bu selection sortu incele sözde kod ile buraya yaz sana kodlarını vereyim en azından mantıgını anlamıs olursun.
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Re: Karışık sayıyı sıralayıp gruplama algoritması
buraya kadar geldim sayı ve döngüler aşağıda az olarak belirtim
Kod: Tümünü seç
var
dizi:array[1..10] of Integer;
i,j,temp:Integer;
begin
for i:= 1 to 10 do begin
dizi[i]:=StrToInt(ListBox1.Items[i-1]);
end;
for i:=1 to 10 do begin
for j:=1 to 9 do begin
if dizi[j]> dizi[j+1] then begin
temp:=dizi[j];
dizi[j]:=dizi[j+1];
dizi[j+1]:=temp;
end;
end;
end;
for i:= 1 to 10 do ListBox2.Items.Add(IntToStr(dizi[i]));
end;
Mücadele güzelleştirir!
Re: Karışık sayıyı sıralayıp gruplama algoritması
procedure TForm1.Button1Click(Sender: TObject);
var
adet,i,j,temp:integer;
dizi: array of integer;
begin
adet:=ListBox1.Items.Count;//eleman sayısını aldık
SetLength(dizi,adet);////diziyi eleman sayısı kadar boyutlandırdık. buraya sen sabit bi sayıda girebilirsin
for i := 0 to adet-1 do
begin
dizi:=StrToInt(ListBox1.Items.Strings);//////listboxtaki verileri diziye aldık
end;
for i := 0 to adet - 2 do/// i değişkenini eleman sayısının 2 eksigi kadar donder
begin
for j := i+1 to adet-1 do//// j degiskenini i degerinin bir fazlasından baslat ve dizinin eleman sayısı kadar donder
begin
if dizi>dizi[j] then////// dizinin n. ci elemanı dizinin n+1 . elemanından büyükse yerlerini degistir.
begin
temp :=dizi[j];
dizi[j] :=dizi;
dizi :=temp;
end;
end;
end;
for i := 0 to adet - 1 do
begin
ListBox2.Items.Add(IntToStr(dizi));///// ikinci diziye aktar.
end;
bu algortima karmaşıklığı n kareye sahiptir. yani verilerin cogaldıkca hızı yavaslıcaktır. tavsiyem bu gibi sıralamalarda eleman sayısını bilmiyorsan ya merge sortu kullan yada quik sortu kullan ikiside n karmasıklıgına sahip olması lazım
var
adet,i,j,temp:integer;
dizi: array of integer;
begin
adet:=ListBox1.Items.Count;//eleman sayısını aldık
SetLength(dizi,adet);////diziyi eleman sayısı kadar boyutlandırdık. buraya sen sabit bi sayıda girebilirsin
for i := 0 to adet-1 do
begin
dizi:=StrToInt(ListBox1.Items.Strings);//////listboxtaki verileri diziye aldık
end;
for i := 0 to adet - 2 do/// i değişkenini eleman sayısının 2 eksigi kadar donder
begin
for j := i+1 to adet-1 do//// j degiskenini i degerinin bir fazlasından baslat ve dizinin eleman sayısı kadar donder
begin
if dizi>dizi[j] then////// dizinin n. ci elemanı dizinin n+1 . elemanından büyükse yerlerini degistir.
begin
temp :=dizi[j];
dizi[j] :=dizi;
dizi :=temp;
end;
end;
end;
for i := 0 to adet - 1 do
begin
ListBox2.Items.Add(IntToStr(dizi));///// ikinci diziye aktar.
end;
bu algortima karmaşıklığı n kareye sahiptir. yani verilerin cogaldıkca hızı yavaslıcaktır. tavsiyem bu gibi sıralamalarda eleman sayısını bilmiyorsan ya merge sortu kullan yada quik sortu kullan ikiside n karmasıklıgına sahip olması lazım
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Re: Karışık sayıyı sıralayıp gruplama algoritması
php de istediğimi aşağıdaki kodlarla alabiliyorum
ekran çıktısı şöyle oluyor
Array
(
[1-5] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
)
[6-10] => Array
(
[0] => 7
[1] => 10
)
[11-15] => Array
(
[0] => 13
[1] => 15
[2] => 15
)
[16-20] => Array
(
[0] => 20
)
[21-25] => Array
(
[0] => 22
)
[26-30] => Array
(
[0] => 28
[1] => 30
)
[31-35] => Array
(
[0] => 31
[1] => 32
[2] => 35
)
[36-40] => Array
(
[0] => 36
)
)
bunu delphide memoda yapmam için ne yapmam lazım çözemedim bir türlü
Kod: Tümünü seç
<?php
$ar=array(3,5,7,2,1,10,15,13,15,20,22,28,30,31,32,35,36);
asort($ar);
$aralik=5;
$araArtis=5;
foreach($ar as $a=>$d){
if($d<$aralik+1){
$tumu[($aralik-$araArtis+1)."-".$aralik][]=$d;
}else{
$aralik+=$araArtis;
$tumu[($aralik-$araArtis+1)."-".$aralik][]=$d;
}
}
echo "<pre>";
print_r($tumu);
echo "</pre>"
?>
Array
(
[1-5] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
)
[6-10] => Array
(
[0] => 7
[1] => 10
)
[11-15] => Array
(
[0] => 13
[1] => 15
[2] => 15
)
[16-20] => Array
(
[0] => 20
)
[21-25] => Array
(
[0] => 22
)
[26-30] => Array
(
[0] => 28
[1] => 30
)
[31-35] => Array
(
[0] => 31
[1] => 32
[2] => 35
)
[36-40] => Array
(
[0] => 36
)
)
bunu delphide memoda yapmam için ne yapmam lazım çözemedim bir türlü
Mücadele güzelleştirir!