Diziler
BİL131 - Bilişim Teknolojileri ve Programlama Hakan Ezgi Kızılöz
Sıralama yapmak, farkına varsak da varmasak da günlük hayatta oldukça sık yaptığımız bir işlemdir.
En basitinden, sabah kalkınca yaptığımız işlerin bile bir sırası vardır.
Sıralama yapmak insanlar için bu kadar önemliyken, bilgisayar programlarında da tabii ki kendisine yer bulacaktır.
Dizi Elemanlarının Sıralanması
Bilgisayar programları kullanarak sıralama yapmak için çok sayıda algoritma geliştirilmiştir.
Biz burada en temel yöntemlerden birisi olan kabarcık sıralama (bubble sort) hakkında konuşacağız.
Kabarcık sıralama yönteminde iç içe iki döngü kullanılarak bütün elemanlar sıralanır.
Bu döngülerden dışarıda olan döngünün her tekrarında elemanlardan bir tanesi kendi yerine taşınmış olur. Bu
Dizi Elemanlarının Sıralanması
Kabarcık sıralamanın çalışma algoritması şu şekildedir:
1) Eğer listede sadece 1 eleman varsa sıralama bitti, dur.
2) Listeyi bir kere dolaş, her elemanı kendisinden gelen bir sonraki eleman ile karşılaştır, eğer gerekiyorsa karşılaştırma sonucu olarak bu iki elemanı yer değiştir.
3) Hiç yer değişikliği yapmadıysan sıralama bitti, dur.
Aksi halde en sondaki elemanı listeden çıkar, 1.
adıma dön ve tekrar başla.
Dizi Elemanlarının Sıralanması
Dizi Elemanlarının Sıralanması
0 19 1 4 2 81 3 71 4 55 5 13
0 4 1 19 2 81 3 71 4 55 5 13
0 4 1 19 2 81 3 71 4 55 5 13
0 4 1 19 2 71 3 81 4 55 5 13
0 4 1 19 2 71 3 55 4 81 5 13
0 4 1 19 2 71 3 55 4 13 5 81
Elemanları sırasıyla 19, 4, 81, 71, 55 ve 13 olan diziyi kabarcık sıralama algoritmasıyla sıralayalım.
X
Dizi Elemanlarının Sıralanması
0 4 1 19 2 71 3 55 4 13 5 81
0 4 1 19 2 71 3 55 4 13 5 81
0 4 1 19 2 71 3 55 4 13 5 81
0 4 1 19 2 55 3 71 4 13 5 81
0 4 1 19 2 55 3 13 4 71 5 81
Elemanları sırasıyla 19, 4, 81, 71, 55 ve 13 olan diziyi kabarcık sıralama algoritmasıyla sıralayalım.
X X
Dizi Elemanlarının Sıralanması
0 4 1 19 2 55 3 13 4 71 5 81
0 4 1 19 2 55 3 13 4 71 5 81
0 4 1 19 2 55 3 13 4 71 5 81
0 4 1 19 2 13 3 55 4 71 5 81
Elemanları sırasıyla 19, 4, 81, 71, 55 ve 13 olan diziyi kabarcık sıralama algoritmasıyla sıralayalım.
X X
Dizi Elemanlarının Sıralanması
0 4 1 19 2 13 3 55 4 71 5 81
0 4 1 19 2 13 3 55 4 71 5 81
0 4 1 13 2 19 3 55 4 71 5 81
Elemanları sırasıyla 19, 4, 81, 71, 55 ve 13 olan diziyi kabarcık sıralama algoritmasıyla sıralayalım.
X
Dizi Elemanlarının Sıralanması
0 4 1 13 2 19 3 55 4 71 5 81
0 4 1 13 2 19 3 55 4 71 5 81
Elemanları sırasıyla 19, 4, 81, 71, 55 ve 13 olan diziyi kabarcık sıralama algoritmasıyla sıralayalım.
X
Parametre olarak bir tam sayı dizisi alan ve bu diziyi kabarcık sıralama algoritması ile sıralayıp geri döndüren int[] kabarcik(int[]) metodu aşağıda verilmiştir:
Dizi Elemanlarının Sıralanması
public static int[] kabarcik(int[] dizi) {
int gecici;
for (int k = 1; k < dizi.length; k++){
for (int i = 0; i < dizi.length - k; i++){
if (dizi[i] > dizi[i+1]) {
gecici = dizi[i];
dizi[i] = dizi[i + 1];
dizi[i + 1] = gecici;
} }
}
return dizi;
Sadece bir dizi kullanarak ifade edemeyeceğimiz, bir sütundan fazla değer içeren verileri saklamak için çok boyutlu dizileri kullanabiliriz.
Örneğin, Ankara'nın bir yıllık sıcaklık verilerini haftalık diziler halinde elde ettiğimizi düşünelim. Bu durumda elimizde 52 tane 7 boyutlu dizi olacaktır.
52 farklı 7 boyutlu dizi oluşturmak yerine bir tane çok boyutlu dizi oluşturarak haftalık değerleri bir tek dizi içerisinde saklayabiliriz.
Java'da çok boyutlu dizi oluşturmak için aşağıdaki komutu kullanırız:
veri_turu[][] cokBoyutluDizi = new veri_turu[uzunluk1][uzunluk2];
Çok Boyutlu Diziler
Çok Boyutlu Diziler
Çok boyutlu dizilerin özellikleri ve kullanımları tek boyutlu dizilere benzerdir.
Tek boyutlu dizilerden farklı olarak, dizi elemanlarına bir değil birden fazla indis kullanılarak erişilir.
Örneğin biraz önceki örnekte 17. haftanın 3.
gününün sıcaklık değerine ulaşmak için sicakliklar[17][3] ifadesini kullanmamız gerekir.
Çok Boyutlu Diziler
Tek boyutlu dizilerde olduğu gibi, çok boyutlu dizilerin elemanları da dizi oluşturulurken atanabilir.
int[][] dizi = {{1,2,3}, {4,5,6}};
Çok boyutlu dizinin alt dizilerinin boyu farklı olabilir.
int[][] dizi2 = {{1,2,3}, {4,5,6,7,8}};
Çok Boyutlu Dizilerin Boyu
Tek boyutlu dizilerin boyunu diziIsmi.length komutu ile hesaplayabiliyorduk.
Çok boyutlu dizilerde diziIsmi.length komutu bize çok boyutlu dizinin ilk indisinin uzunluğunu verirken, ikinci indisin uzunluğunu bulmak için diziIsmi[0].length komutunu kullanmalıyız.
Yani sicakliklar dizisi için sicakliklar.length komutu bize 52 değerini verirken, sicakliklar[0].length komutunun değeri 7 olacaktır.
Çok Boyutlu Dizilerin Boyu
Eğer çok boyutlu dizilerde alt dizilerin boyutları farklıysa, her bir dizinin boyutuna o dizinin indisi ile eriştikten sonra ulaşabiliriz.
int[][] dizi2 = {{1,2,3}, {4,5,6,7,8}};
Yukarıdaki gibi tanımlanmış dizi2 dizisinin uzunluk değerlerine ulaşmak istersek;
dizi2.length sonucu 2,
dizi2[0].length sonucu 3 ve
Çok Boyutlu Dizileri Dolaşmak
Tek boyutlu dizi elemanlarını dolaşmak için bir tane for döngüsü kullanmamız yeterliydi.
Çok boyutlu dizi elemanlarını dolaşmak için ise her bir boyut için bir adet for döngüsü kullanmamız gerekmektedir.
Çok Boyutlu Dizileri Dolaşmak
Parametre olarak bir tane çok boyutlu tam sayı dizisi alan ve bu çok boyutlu dizinin bütün elemanlarını ekrana yazdıran void cbdYazdir(int[][]) metodu aşağıdadır:
public static void cbdYazdir(int[][] dizi) {
for(int i = 0; i < dizi.length; i++) {
for(int j = 0; j < dizi[i].length; j++) {
System.out.print(dizi[i][j] + " ");
}