ALGORİTMA VE PROGRAMLAMA Sıralama
ALGORİTMA VE PROGRAMLAMA
Sıralama
SIRALAMA
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 “Seçimli Sıralama, Selection 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 BIR DIZININ KÜÇÜKTEN
BÜYÜĞE SıRALANMASı
Küçükten büyüğe doğru sıralanmak istenilen
dizi elemanları:
Eleman
no
1 2 3 4 5
Eleman 22 43 24 9 45
ADıM 1: DIZIDEKI EN KÜÇÜĞÜN BULUNUP DIZININ ILK
ELEMANı OLARAK BELIRLENMESI
iterasyon
Dizi Elemanları
1 2 3 4 5
1 22 43 24 9 45
2 22 43 24 9 45
3 22 43 24 9 45
4 9 43 24 22 45
5 9 43 24 22 45
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
iterasyon
Dizi Elemanları
1 2 3 4 5
1 9 43 24 22 45
2 9 24 43 22 45
3 9 22 43 24 45
4 9 22 43 24 45
ADıM 3: DIZIDEKI 3. EN KÜÇÜĞÜN BULUNUP DIZININ 3.
ELEMANı OLARAK BELIRLENMESI
iterasyon
Dizi Elemanları
1 2 3 4 5
1 9 22 43 24 45
2 9 22 24 43 45
3 9 22 24 43 45
ADıM 4: DIZIDEKI 4. EN KÜÇÜĞÜN BULUNUP DIZININ 4.
ELEMANı OLARAK BELIRLENMESI
İşlem no
Dizi
1 2 3 4 5
1 9 22 24 43 45
2 9 22 24 43 45
Sıralı dizi:Eleman
no
1 2 3 4 5
Eleman 9 22 24 43 45
YUKARıDAKI DIZININ SıRALANMASıNA AIT PROGRAM ŞU
ŞEKILDEDIR:
// siralamaSecmeli.cpp : main project file.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
int dizi[] = {22, 43, 24, 9, 45};
int N = 5;
int i, j, gecici;
int main()
{
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])
{
gecici = dizi[i];
dizi[i] = dizi[j];
dizi[j] = gecici;
}
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();
return 0;
}
Ö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 semboller ile karşılaştırılamaz.
Yani
dizi[i] < dizi[j]
şeklinde bir ifade kullanılamaz.
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 ise pozitif bir sayı üretir.
// siralaKarakter.cpp : main project file.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
char Ad[5][15], Gecici[15];
int N = 5;
int i, j;
int main(array<System::String ^> ^args)
{
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( Gecici, Ad[i] );
strcpy( Ad[i], Ad[j] );
strcpy( Ad[j], Gecici );
}
cout << "\nSirali dizi\n";
cout << "-----------\n";
for (i=0;i<N;i++)
cout << Ad[i]<<endl;
getch();
return 0;
}
ÖRNEK:
Günlük sıcaklık değerleri klavyeden
bilgisayara girildiğinde, sıcaklığa göre
büyükten küçüğe sıralı listeyi oluşturan bir
program yazınız?
/ sicaklik.cpp : main project file.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
char Gun[7][15], B[15];
int Sicaklik[7], S;
int i,j;
int main()
{
for (i=0; i<7; i++)
{
cout << (i+1) << ". gun ";
cin>>Gun[i];
cout << "sicaklik degeri: ";
cin >> Sicaklik[i];
}
for (i=0; i<6; i++)
for (j=i+1; j<7; j++)
if (Sicaklik[i] < Sicaklik[j])
{
S = Sicaklik[i];
Sicaklik[i] = Sicaklik[j];
Sicaklik[j] = S;
strcpy( B, Gun[i] );
strcpy( Gun[i], Gun[j] );
strcpy( Gun[j], B );
}
cout << "\n\nGunler Sicaklik\n";
cout << "--------------- --------\n";
cout << setiosflags(ios::left); //sola dayali format
for (i=0;i<7;i++)
cout << setw(16) << Gun[i]
<< Sicaklik[i] << endl;
getch();
return 0;
}
ÖDEV: 10 öğrencinin bulunduğu bir
sınıfta, öğrenci adı, soyadı, vize ve
final notunu dizi veri tipine
kaydeden, vize ve finalin %50’sini
alarak başarı notunu hesap eden,
girilen verileri ve başarı notunu
listeleyen, isme göre arama yapan,
vize notuna göre küçükten büyüğe
sıralayan, başarı notu 50’nin üzerinde
olanları listeleyen bir program
yazınız?