"Because Swap_push doesn't feel as natural"
This project has been created as part of the 42 curriculum by sekartav and fakartal.
Push_swap, iki yığın (stack A ve stack B) ve sınırlı bir işlem seti kullanarak verilen sayı dizisini en az hamle ile küçükten büyüğe sıralamayı amaçlayan bir algoritma projesidir. Bu proje, algoritmik karmaşıklığı (Big-O) somut bir şekilde anlamak ve veri setinin durumuna göre en uygun stratejiyi seçmek üzerine kurgulanmıştır.
Proje, -Wall -Wextra -Werror bayraklarıyla derlenen bir Makefile içerir. Derlemek için:
makeProgram, tam sayı listesini argüman olarak alır. Çıktı olarak sıralama için gereken işlemleri (sa, pb, ra vb.) ekrana yazdırır.
./push_swap 4 67 3 87 23| Flag | Açıklama |
|---|---|
--simple |
O(n²) Selection Sort stratejisini zorlar |
--medium |
O(n√n) Chunk-based stratejisini zorlar |
--complex |
O(n log n) Radix Sort stratejisini zorlar |
--adaptive |
Disorder metriğine göre otomatik seçim yapar (Varsayılan) |
--bench |
Performans istatistiklerini ve işlem sayılarını stderr üzerinden gösterir |
Strateji: Stack A'daki minimum değeri bulup en üste taşır ve Stack B'ye atar. Tüm elemanlar bitene kadar tekrarlanır, sonra Stack A'ya geri itilir.
Strateji: Veri seti √n boyutunda parçalara (chunks) ayrılır. Sayılar ait oldukları parça aralığına göre Stack B'ye itilirken kendi içinde rotasyonlarla optimize edilir.
Strateji: Sayılar öncelikle 0'dan N-1'e kadar indekslenir. Bitwise (bit düzeyinde) işlemler kullanılarak ikili tabanda sıralama yapılır. log n basamak sayısı kadar işlem garantisi sağlar.
Program, başlangıç yığınının Disorder Metric (Düzensizlik Ölçümü) değerini hesaplar:
| Düzensizlik Değeri | Seçilen Algoritma |
|---|---|
| < 0.20 | Basit O(n²) |
| 0.20 ≤ değer < 0.50 | Orta O(n√n) |
| ≥ 0.50 | Karmaşık O(n log n) |
- Push_swap Subject PDF (Version 1.1)
- Donald Knuth — Big-O Notation Theory
- Radix Sort and Bitwise Optimization Documentation
Bu projede yapay zeka (Google Gemini), 42 AI talimatlarına uygun olarak şu alanlarda kullanılmıştır:
- Mimari Tasarım: Global değişken yasağını ihlal etmeden
--benchmodu için statik takipçi yapısının kurgulanması. - Hata Yönetimi:
ft_printfkütüphanesinin hata çıktılarını (stderr) yönlendirme mantığının hata ayıklanması. - Dökümantasyon: Bu README dosyasının konu dökümanındaki (subject) gereksinimlere tam uyumu.
Not: Hiçbir sıralama mantığı veya algoritma çekirdeği kopyala-yapıştır yapılmamıştır; AI sadece yapısal rehberlik için kullanılmıştır.
| Üye | Katkılar |
|---|---|
| sekartav | Makefile yapısı, ft_printf entegrasyonu, Radix Sort ve Chunk-based algoritmalarının implementasyonu |
| fakartal | Parsing mantığı, Disorder Metric hesaplama fonksiyonu, Selection Sort ve test senaryolarının oluşturulması |