JavaScript Sıralama Algoritmaları: Kabarcık, Ekleme, Seçme ve Birleştirme
Merhaba! Bu makalede, JavaScript’te sık kullanılan dört temel sıralama algoritmasını ele alacağız: Kabarcık Sıralama (Bubble Sort), Ekleme Sıralama (Insertion Sort), Seçme Sıralama (Selection Sort) ve Birleştirme Sıralama (Merge Sort). Her algoritmanın çalışma prensibini, karmaşıklığını ve örnek kodlarını detaylı olarak inceleyeceğiz. Ayrıca, bu algoritmaları karşılaştırarak hangi durumlarda hangisinin daha uygun olduğunu göreceğiz. Umarım faydalı bulursunuz!
Kabarcık Sıralama (Bubble Sort)
Kabarcık sıralama, en basit sıralama algoritmalarından biridir. Listeyi yineleyerek, bitişik elemanları karşılaştırır ve gerekirse yer değiştirir. Bu işlem, listenin sonuna kadar tekrarlanır. Büyük elemanlar, tıpkı kabarcıklar gibi listenin sonuna doğru “yükselir”.
function bubbleSort(arr) {
let swapped;
do {
swapped = false;
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
swapped = true;
}
}
} while (swapped);
return arr;
}
Kabarcık sıralama, O(n²) zaman karmaşıklığına sahiptir. Bu nedenle, büyük listeler için oldukça yavaştır. Ancak, basitliği ve anlaşılırlığı nedeniyle, eğitim amaçlı olarak sıkça kullanılır. Örneğin, küçük bir diziyi sıralamak için oldukça uygundur.
Ekleme Sıralama (Insertion Sort)
Ekleme sıralama, dizinin bir kısmını sıralı tutarak çalışır. Sıradaki elemanı alır ve sıralı kısımda doğru yerine yerleştirir. Bu işlem, tüm elemanlar sıralı olana kadar tekrarlanır.
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let key = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
return arr;
}
Ekleme sıralama, en kötü durumda O(n²) zaman karmaşıklığına, en iyi durumda ise O(n) zaman karmaşıklığına sahiptir. Kabarcık sıralamaya göre daha verimlidir, özellikle küçük veya neredeyse sıralı listeler için tercih edilebilir. Yani, büyük bir veri kümesi için uygun olmayabilir.
Seçme Sıralama (Selection Sort)
Seçme sıralama, her yinelemede en küçük (veya en büyük) elemanı bulup onu sıralı kısmın sonuna yerleştirir. Bu işlem, tüm elemanlar sıralı olana kadar devam eder.
function selectionSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
let minIndex = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
return arr;
}
Seçme sıralama da O(n²) zaman karmaşıklığına sahiptir. Ancak, yer değiştirme işlemlerinin sayısı diğer O(n²) algoritmalara göre daha azdır, bu da performans açısından küçük bir avantaj sağlayabilir. Yine, büyük veri setlerinde performans problemi yaşayabiliriz.
Birleştirme Sıralama (Merge Sort)
Birleştirme sıralama, "böl ve yönet" (divide and conquer) yaklaşımını kullanan bir algoritmadır. Listeyi sürekli olarak ikiye böler, her alt listeyi sıralar ve sonrasında bu sıralı alt listeleri birleştirir.
function mergeSort(arr) {
if (arr.length <= 1) {
return arr;
}
const mid = Math.floor(arr.length / 2);
const left = arr.slice(0, mid);
const right = arr.slice(mid);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right) {
let result = [];
let i = 0;
let j = 0;
while (i < left.length && j < right.length) {
if (left[i] < right[j]) {
result.push(left[i]);
i++;
} else {
result.push(right[j]);
j++;
}
}
return result.concat(left.slice(i)).concat(right.slice(j));
}
Birleştirme sıralama, O(n log n) zaman karmaşıklığına sahiptir. Bu, diğer algoritmalara göre çok daha verimlidir ve büyük listeler için ideal bir seçimdir. Ancak, ek bellek kullanımı nedeniyle, yerinde sıralama algoritmaları kadar yerden tasarruflu değildir. Bu durum, büyük veri setlerinde performansını etkileyebilir.
Algoritma Karşılaştırması
Aşağıdaki tabloda, incelenen algoritmaların zaman karmaşıklıklarını özetledik:
| Algoritma | En İyi Durum | Ortalama Durum | En Kötü Durum |
|---|---|---|---|
| Kabarcık Sıralama | O(n) | O(n²) | O(n²) |
| Ekleme Sıralama | O(n) | O(n²) | O(n²) |
| Seçme Sıralama | O(n²) | O(n²) | O(n²) |
| Birleştirme Sıralama | O(n log n) | O(n log n) | O(n log n) |
Sonuç olarak, büyük veri kümeleri için Birleştirme Sıralama en etkili çözümdür. Ancak, küçük veri kümeleri veya neredeyse sıralı veriler için Ekleme Sıralama daha hızlı olabilir. Kabarcık ve Seçme Sıralama algoritmaları daha basit olmasına rağmen büyük veriler için uygun değildir. Doğru algoritmanın seçimi, verilerin boyutuna ve özelliklerine bağlıdır.
Umarım bu makale faydalı olmuştur. Daha fazla bilgi için fatihsoysal.com adresini ziyaret edebilirsiniz. Ayrıca, konu hakkında daha derinlemesine bilgi edinmek için bu kaynağı inceleyebilirsiniz.
#Etiketler
#JavaScript #SıralamaAlgoritmaları #KabarcıkSıralama #EklemeSıralama #SeçmeSıralama #BirleştirmeSıralama #Algoritma #Programlama #KodÖrnekleri