6. Hafta - Sorting ve Searching Algoritmaları ve Animasyonları

Animasyonlar

Algoritmalar

1. Bubble Sort (Balon Sıralaması): Bubble Sort algoritması ile diziyi küçükten büyüğe sıralama.
 
#include 

void bubbleSort(int dizi[], int n) {
    // Her turda komşu elemanlar karşılaştırılarak yer değiştirir.
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (dizi[j] > dizi[j + 1]) {
                int temp = dizi[j];
                dizi[j] = dizi[j + 1];
                dizi[j + 1] = temp;
            }
        }
    }
}

int main() {
    int dizi[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(dizi) / sizeof(dizi[0]);
    bubbleSort(dizi, n);
    printf("Sıralı dizi: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", dizi[i]);
    }
    return 0;
}
        
2. Insertion Sort (Ekleme Sıralaması): Insertion Sort algoritması ile diziyi sıralama.
 
// Her eleman, sıralı kısmın doğru yerine eklenir.
#include 

void insertionSort(int dizi[], int n) {
    int key, j;
    for (int i = 1; i < n; i++) {
        key = dizi[i]; // Yerleştirilecek eleman
        j = i - 1;
        // key'den büyük elemanlar sağa kaydırılır.
        while (j >= 0 && dizi[j] > key) {
            dizi[j + 1] = dizi[j];
            j--;
        }
        dizi[j + 1] = key; // key uygun konuma yerleştirilir.
    }
}

int main() {
    int dizi[] = {12, 11, 13, 5, 6};
    int n = sizeof(dizi) / sizeof(dizi[0]);
    insertionSort(dizi, n);
    printf("Sıralı dizi: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", dizi[i]);
    }
    return 0;
}
        
3. Selection Sort (Seçme Sıralaması): Bu algoritma ile dizideki en küçük elemanı bulup sırasıyla yerleştirme.
// Bu program, 
#include 

void selectionSort(int dizi[], int n) {
    int enKucuk, temp;
    for (int i = 0; i < n - 1; i++) {
        enKucuk = i;
        for (int j = i + 1; j < n; j++) {
            if (dizi[j] < dizi[enKucuk]) {
                enKucuk = j;
            }
        }
        // Bulunan en küçük eleman ile mevcut eleman yer değiştirir.
        temp = dizi[enKucuk];
        dizi[enKucuk] = dizi[i];
        dizi[i] = temp;
    }
}

int main() {
    int dizi[] = {29, 10, 14, 37, 14};
    int n = sizeof(dizi) / sizeof(dizi[0]);
    selectionSort(dizi, n);
    printf("Sıralı dizi: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", dizi[i]);
    }
    return 0;
}
        
4. Quick Sort (Hızlı Sıralama): Quick Sort algoritması ile diziyi sıralama.
 
// Pivot eleman etrafında bölerek sıralama yapılır.
#include 

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int partition(int dizi[], int low, int high) {
    int pivot = dizi[high];
    int i = low - 1;
    for (int j = low; j < high; j++) {
        if (dizi[j] < pivot) {
            i++;
            swap(&dizi[i], &dizi[j]);
        }
    }
    swap(&dizi[i + 1], &dizi[high]);
    return i + 1;
}

void quickSort(int dizi[], int low, int high) {
    if (low < high) {
        int pi = partition(dizi, low, high);
        quickSort(dizi, low, pi - 1);
        quickSort(dizi, pi + 1, high);
    }
}

int main() {
    int dizi[] = {10, 7, 8, 9, 1, 5};
    int n = sizeof(dizi) / sizeof(dizi[0]);
    quickSort(dizi, 0, n - 1);
    printf("Sıralı dizi: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", dizi[i]);
    }
    return 0;
}
        
5. Linear Search (Doğrusal Arama): Linear Search algoritması ile dizi içinde arama yapma.
 
#include 

int linearSearch(int dizi[], int n, int aranan) {
    for (int i = 0; i < n; i++) {
        if (dizi[i] == aranan)
            return i; // aranan elemanın bulunduğu indeks
    }
    return -1; // eleman bulunamazsa -1 döner
}

int main() {
    int dizi[] = {3, 4, 5, 6, 7};
    int n = sizeof(dizi) / sizeof(dizi[0]);
    int aranan = 6;
    int indeks = linearSearch(dizi, n, aranan);
    if (indeks != -1)
        printf("Eleman indeks %d'de bulundu.\n", indeks);
    else
        printf("Eleman bulunamadı.\n");
    return 0;
}
        
6. Binary Search (İkili Arama): Binary Search algoritması ile sıralı dizide arama yapma.
 
// Dizinin sıralı olması gerekmektedir.
#include 

int binarySearch(int dizi[], int sol, int sag, int aranan) {
    while (sol <= sag) {
        int orta = sol + (sag - sol) / 2;
        if (dizi[orta] == aranan)
            return orta;
        if (dizi[orta] < aranan)
            sol = orta + 1;
        else
            sag = orta - 1;
    }
    return -1; // eleman bulunamadı
}

int main() {
    int dizi[] = {2, 3, 4, 10, 40};
    int n = sizeof(dizi) / sizeof(dizi[0]);
    int aranan = 10;
    int indeks = binarySearch(dizi, 0, n - 1, aranan);
    if (indeks != -1)
        printf("Eleman indeks %d'de bulundu.\n", indeks);
    else
        printf("Eleman bulunamadı.\n");
    return 0;
}