Array Algorithms¶
Genel Bakış¶
Dizi algoritmaları, yazılım geliştirmede en sık kullanılan algoritma türlerinden biridir. Bu bölümde, diziler üzerinde yapılan temel işlemleri ve bunların C# implementasyonlarını inceleyeceğiz.
Temel Dizi İşlemleri¶
1. En Büyük ve En Küçük Eleman Bulma¶
public class MinMaxFinder
{
public (int min, int max) FindMinMax(int[] array)
{
if (array == null || array.Length == 0)
throw new ArgumentException("Dizi boş olamaz");
int min = array[0];
int max = array[0];
for (int i = 1; i < array.Length; i++)
{
if (array[i] < min)
min = array[i];
if (array[i] > max)
max = array[i];
}
return (min, max);
}
}
2. Diziyi Tersine Çevirme¶
public class ArrayReverser
{
public void ReverseArray(int[] array)
{
if (array == null)
throw new ArgumentNullException(nameof(array));
int start = 0;
int end = array.Length - 1;
while (start < end)
{
int temp = array[start];
array[start] = array[end];
array[end] = temp;
start++;
end--;
}
}
}
3. Eksik Sayıyı Bulma¶
public class MissingNumberFinder
{
public int FindMissingNumber(int[] array)
{
if (array == null)
throw new ArgumentNullException(nameof(array));
int n = array.Length + 1;
int expectedSum = n * (n + 1) / 2;
int actualSum = array.Sum();
return expectedSum - actualSum;
}
}
Arama Algoritmaları¶
1. Linear Search¶
public class LinearSearch
{
public int Search(int[] array, int target)
{
for (int i = 0; i < array.Length; i++)
{
if (array[i] == target)
return i;
}
return -1;
}
}
2. Binary Search¶
public class BinarySearch
{
public int Search(int[] array, int target)
{
int left = 0;
int right = array.Length - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (array[mid] == target)
return mid;
if (array[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
}
Performans Analizi¶
Algoritma | En İyi Durum | Ortalama Durum | En Kötü Durum | Bellek Kullanımı |
---|---|---|---|---|
Linear Search | O(1) | O(n) | O(n) | O(1) |
Binary Search | O(1) | O(log n) | O(log n) | O(1) |
Min/Max Bulma | O(n) | O(n) | O(n) | O(1) |
Tersine Çevirme | O(n) | O(n) | O(n) | O(1) |
Best Practices¶
- Dizi sınırlarını kontrol et
- Null kontrolü yap
- Gereksiz döngülerden kaçın
- Bellek kullanımını optimize et
- Hata durumlarını yönet
Örnek Uygulamalar¶
- Dizi sıralama
- Dizi filtreleme
- Dizi birleştirme
- Dizi karşılaştırma
- Dizi dönüştürme