Javascript Patience Sort Algoritması

Herkese merhaba, Javascript yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda sıralama algoritmalarından biri olan patience sort algoritmasını anlatacağım. Hadi başlayalım !
Table of Contents
Patience Sort Algoritması Nedir?
Patience sort, bir sıralama algoritmasıdır ve adını kart oyunlarındaki “patience” isminden almıştır. Bu algoritma, merge sort’a benzer bir yapıya sahip olmakla birlikte, merge sort’tan daha az karşılaştırma yapar ve daha fazla hafıza kullanır. Ayrıca, merge sort’tan daha iyi bir performans sergiler.
Patience sort algoritması, bir dizi içindeki elemanları küçükten büyüğe sıralamak için kullanılır. Algoritma, her bir elemanı bir yığın (stack) olarak düşünecek şekilde işlem yapar. İlk olarak, ilk eleman bir yığın olarak kabul edilir. Daha sonra, sıradaki eleman, tüm yığınlar arasında en küçük elemana sahip yığın seçilerek o yığının üzerine eklenir. Eğer böyle bir yığın yoksa, yeni bir yığın oluşturulur ve eleman bu yığının üzerine eklenir. Bu işlem, tüm elemanlar sıralanana kadar devam eder. Son olarak, tüm yığınlar tek bir dizide birleştirilir ve sıralama işlemi tamamlanır.
Javascript Patience Sort Algoritması Kodu
Aşağıda, Patience sort algoritmasının JavaScript kod örneklerini gösteriyorum.
Patience sort fonksiyonu
Bu fonksiyon, bir dizi içindeki elemanları küçükten büyüğe sıralar. Patience sort algoritması kullanılarak bu işlem gerçekleştirilir.
function patienceSort(arr) {
let piles = [];
for (let i = 0; i < arr.length; i++) {
let j = 0;
while (j < piles.length && arr[i] > piles[j][piles[j].length - 1]) {
j++;
}
if (j === piles.length) {
piles.push([]);
}
piles[j].push(arr[i]);
}
let result = [];
while (piles.length > 0) {
let min = 0;
for (let i = 1; i < piles.length; i++) {
if (piles[i][piles[i].length - 1] < piles[min][piles[min].length - 1]) {
min = i;
}
}
result.push(piles[min].pop());
if (piles[min].length === 0) {
piles.splice(min, 1);
}
}
return result;
}
Bu kod parçası, “patienceSort” adlı bir fonksiyon oluşturur ve bir dizi içindeki elemanları küçükten büyüğe sıralar. Fonksiyon, “piles” adlı bir boş bir dizi oluşturarak işe başlar. Daha sonra, döngü içinde tüm elemanlar üzerinde gezinir. İç içe bir “while” döngüsü kullanarak, her bir elemanın hangi yığının üzerine ekleneceğini belirler. Bu işlem, elemanı en küçük yığının üzerine ekleyene kadar veya tüm yığınlar üzerinde gezinene kadar devam eder. Eğer böyle bir yığın yoksa, yeni bir yığın oluşturulur ve eleman bu yığının üzerine eklenir.
Daha sonra, boş bir “result” adlı dizi oluşturulur ve tüm yığınlar üzerinde döngü yapılır. İç içe bir döngü kullanarak, en küçük elemana sahip yığın bulunur ve bu yığının üzerindeki son eleman “result” dizisinin sonuna eklenir. Bu işlem, tüm elemanlar “result” dizisine eklenene kadar devam eder.
Son olarak, “result” dizisi sıralanmış olarak döndürülür.
Patience sort kullanarak bir dizi sıralama
Aşağıdaki kod parçası, bir dizi içindeki elemanları küçükten büyüğe sıralamak için “patienceSort” fonksiyonunu kullanır.
const arr = [5, 8, 3, 1, 4, 6, 2, 7];
const sortedArr = patienceSort(arr);
console.log(sortedArr); // [1, 2, 3, 4, 5, 6, 7, 8]
Bu kod parçası, önce bir dizi oluşturur ve ardından bu diziyi “patienceSort” fonksiyonuna gönderir. Fonksiyon, dizideki elemanları küçükten büyüğe sıralar ve sıralanmış diziyi “sortedArr” değişkenine atar. Son olarak, sıralanmış dizi konsola yazdırılır.
Sonuç
Bu makalede, Patience sort algoritmasını anlattım ve JavaScript kod örnekleri ile destekledim. Patience sort, merge sort’a benzer bir yapıya sahip olmakla birlikte, daha az karşılaştırma yapar ve daha fazla hafıza kullanır. Ayrıca, merge sort’tan daha iyi bir performans sergiler. Bu algoritma, küçükten büyüğe sıralama yapmak için kullanılır ve karmaşıklık analizi O(n*logn) olarak hesaplanır.
Evet Javascript ile patience sort algoritması bu şekilde idi. Tüm Javascript yazılarımıza buraya, diğer sıralama algoritmaları yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.