Sıralama
Sıralama, bir dizideki sayısal elemanların küçükten büyüğe veya büyükten küçüğe, sayısal olmayan bir dizideki elemanların ise A’ dan Z’ ye veya Z’ den A’ ya sıralama işlemidir. Sıralama işlemi örnekler yardımıyla açıklanacaktır.
En çok kullanılan sıralama algoritmalarından biri “Bubble Sort” algoritmasında, dizideki ilk elemandan başlayarak, her bir eleman kendisinden sonra gelen diğer elemanlarla karşılaştırılır (1. eleman 2, 3, …, n. elamanlarla, 2. eleman 3,4, …, n. elemanlarla). Gerekiyorsa elemanların yerleri değiştirilir.
Örnek: 5 elemanlı sayısal dizinin küçükten büyüğe sıralanması Küçükten büyüğe doğru sıralanmak istenilen dizi: Eleman no Eleman
Adım 1: Dizideki en küçüğün bulunup dizinin ilk elemanı olarak belirlenmesi İşlem no Dizi
1. adımda dizideki eleman sayısı kadar işlem yapılarak dizideki en küçük eleman bulunarak ilk sıraya alınmıştır. İlk işlemde 22 ile 43 karşılaştırılmış, önceki sırada olan sonrakinden küçük olduğundan değişim yapılmamıştır. 3. işlemde dizinin 1. ile 4. elemanı karşılaştırılmış, 9 daha küçük olduğundan 1 ile 4. eleman yer değiştirmiştir.
Adım 2: Dizideki 2. en küçüğün bulunup dizinin 2. elemanı olarak belirlenmesi İşlem no Dizi
Adım 3: Dizideki 3. en küçüğün bulunup dizinin 3. elemanı olarak belirlenmesi İşlem no Dizi
Adım 4: Dizideki 4. en küçüğün bulunup dizinin 4. elemanı olarak belirlenmesi İşlem no Dizi
Sıralı dizi: Eleman no Eleman
Yukarıdaki dizinin sıralanmasına ait program şu şekildedir: #include main() { int dizi[] = {22, 43, 24, 9, 45}; int N = 5; int i,j;
cout << "Siralanmamis dizi\n\n"; cout << "No Eleman\n"; cout << " \n"; for (i=0; i<N; i++) cout << setw(2) << (i+1) << setw(6) << dizi[i] << endl;
for (i=0; i<N-1; i++) for (j=i+1; j<N; j++) if (dizi[i]>dizi[j]) { int gec; gec = dizi[i]; dizi[i] = dizi[j]; dizi[j] = gec; }
cout << "\nSirali dizi\n\n"; cout << "No Eleman\n"; cout << " \n"; for (i=0; i<N; i++) cout << setw(2) << (i+1) << setw(6) << dizi[i] << endl; getch(); }
Örnek: Girilen 5 adet ismin A’dan Z’ye sıralanması Sayısal olmayan bilgilerin sıralanmasında, dizi elemanları karşılaştırılırken birbirine eşit, birbirinden büyük veya küçük olmaları ==, > ve < gibi sembollerle karşılaştırılamamaktadır. Yani dizi[i] < dizi[j] şeklinde bir ifade kulanılamamaktadır.
Bunun yerine, sayısal olmayan bilgilerin karşılaştırılmasında strcmp() fonksiyonu kullanılması gerekmektedir. strcmp( dizi[i], dizi[j]) strcmp( isim, aranan) strcmp( isim, “Ali”)
strcmp() fonksiyonu iki değişkenin birbirine eşit olup olmama, alfabetik olarak hangisinin daha önce veya daha sonra geldiğine göre farklı sayısal değerler üretir.
strcmp(isim, aranan) örneğine göre isim değişkeninin değeri aranan değişkeninin değerine eşitse strcmp() fonksiyonu 0, isim, aranan değişkenine göre alfabetik olarak daha önce geliyorsa negatif bir sayı, tersi durumda pozitif bir sayı üretir.
#include main() { char Ad[5][15], Gec[15]; int N = 5; int i,j; for (i=0; i<N; i++) { cout << (i+1) << ". kisi ismi: "; cin >> Ad[i]; }
for (i=0; i<N-1; i++) for (j=i+1; j<N; j++) if ( strcmp( Ad[i], Ad[j] ) >0 ) { strcpy( Gec, Ad[i] ); strcpy( Ad[i], Ad[j] ); strcpy( Ad[j], Gec ); }
cout << "\nSirali dizi\n"; cout << " \n"; for (i=0;i<N;i++) cout << Ad[i]<<endl; getch(); }
Örnek: Türkiye’nin 7 bölgesine ait bölge adı ve her bir bölge için ortalama sıcaklık değeri girildiğinde, sıcaklık değerlerine göre büyükten küçüğe sıralı listeyi veren program.
#include main() { char Bolge[7][15], B[15]; int Sicak[7], S; int i,j;
for (i=0; i<7; i++) { cout << (i+1) << ". bolge adi: "; cin >> Bolge[i]; cout << "Sicaklik degeri: "; cin >> Sicak[i]; }
for (i=0; i<6; i++) for (j=i+1; j<7; j++) if (Sicak[i] < Sicak[j]) { S = Sicak[i]; Sicak[i] = Sicak[j]; Sicak[j] = S; strcpy( B, Bolge[i] ); strcpy( Bolge[i], Bolge[j] ); strcpy( Bolge[j], B ); }
cout << "\n\nBolge adi Sicaklik\n"; cout << " \n"; cout << setiosflags(ios::left); for (i=0;i<7;i++) cout << setw(16) << Bolge[i] << Sicak[i] << endl; getch(); }
SORULAR 1. N adet sayı bir diziye girildiğinde, dizi elemanlarını küçükten büyüğe sıralayarak sıralı diziyi yazan programı yazınız. NOT: Sıralanmış diziyi ekrana listelerken tekrar eden sayılar varsa sadece bir defa yazılacaktır.
2. N adet sayı bir diziye girildiğinde, dizi elemanlarını küçükten büyüğe sıralayan, eğer varsa tekrar eden sayıları diziye sadece bir defa alarak sıralı diziyi yazan programı yazınız.
3. 7 bölge için sabah, öğlen ve akşam ölçülen sıcaklık değerleri girildiğinde, ortalama sıcaklık değerlerinin bulunduğu listeyi büyükten küçüğe sıralı veren programı yazınız.
4. 7 gün ölçülen gündüz ve gece hava kirlilik değerleri girildiğinde her gün için ortalama kirlilik değerini bularak, ortalama kirlilik değerinin bulunduğu listeyi ortalama kirlilik değerine göre büyükten küçüğe sıralı veren programı yazınız.