Matriste sıralama - selection sort

cnak

Öğrenci
Katılım
20 Ekim 2010
Mesajlar
14
Reaksiyon puanı
0
Puanları
0
elimde bir matris var son sütuna bakarak(küçükten büyüğe) matrisi değiştirmek istiyorum.bunun için ne kullanmalıyım nasıl düşünmeliyim?
örnek:
elimdeki matris bu olsun

20435
91827
50123

son sütuna bakılıyor
5
7
3

küçükten büyüğe doğru sıralansın istiyorum.matrisin son hali şu şekilde olacak yani

50123
20435
91827
 

kosasker

Profesör
Katılım
24 Aralık 2008
Mesajlar
3,195
Reaksiyon puanı
49
Puanları
48
Aynı boyutta ikinci ve tanım değer kümesi boş bir matris oluştur. İçi içe iki tane döngü yeterlidir. Birincisi değerleri alacağın matrisi dolaşacak, ikincisi ise boş matrise karşılaştırma yapıp yazacak.
İkinci yöntemde kullandığın dil C ise pointer kullanabilirsin. Tek döngü ile de hallolur bu yöntemde. Kolay gelsin.
 

anamur

Asistan
Katılım
27 Haziran 2008
Mesajlar
357
Reaksiyon puanı
3
Puanları
18
c# kodu aşağıda:

static void Main(string[] args)
{
int a = 0, b = 0;


int swap;
int m = 0, n = 0;
Console.WriteLine("Enter size of matrix:");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter size of matrix:");
b = Convert.ToInt32(Console.ReadLine());

int[,] arr = new int[a, b];
int[,] ydk = new int[a, b];
//matrix elemanlarını giriyorsun
for (int i=0; i < a; i++)
{
for (int j=0; j < b; j++)
{
Console.WriteLine("Enter matrix number");
arr[i, j] = Convert.ToInt32(Console.ReadLine());

ydk[i, j] = arr[i, j];

}
}
//matrixdeki son elemanları bakıp ona göre sort ediyor
for (int i = 0; i < a; i++)
{
for (int j = i; j < a; j++)
{
//ilk eleman son elemandan büyükse yer değiştiriyor.
if (arr[i, b-1] > ydk[j, b-1])
{
for (m = j; m < j+1; m++)
{
for (n = 0; n < b; n++)
{
swap = ydk[m,n];
ydk[m,n] = ydk[m - 1,n];
ydk[m - 1,n] = swap;
}
}
}
}
}
//ekrana bastırıyor.
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
Console.Write("{0}", ydk[i,j]);

}
Console.WriteLine();
}
Console.ReadLine();
}

kosasker doğru söylemiş. benim yaptığımda onun söleydiği esasında. matrixle uğraşıyosan 2. bir boş array hazırlaman gerekiyor.
 

annttiigs

Profesör
Emektar
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
38
ikinci matrise gerek kalmayabilir.
karşılaştırmayı yap ( sorting algoritmaları yardımcı olacaktır ) mesela 3.satırı 2. satıra koymak istiyorsun. yani aslında yer değiştireceksin bunları.

bir swap metodu yazarsın

Kod:
void swap (int *a,int *b) {
    int t;
    t=*a; //veriyi sakla.
    *a=*b; // verinin üzerine yaz
    *b=*t; //saklanan veriyi değişim noktasına koy. 
   return;
}
 

Son mesajlar

Üst