Negatifler Pozitifler Dizisi
Bu yazımda Algoritmalar dersi vize sınavında sorulan bir soruya cevap olarak oluşturduğum algoritmayı paylaşacağım. Soruda, pozitif ve negatif sayıların karışık şekilde olan bir dizi veriliyor. Bu karışık dizideki sayıların negatifler dizinin baş tarafına, pozitifler ise dizinin son tarafına gelecek şekilde (sırası önemsenmeksizin) değiştirilmesi isteniyor. Oluşturulacak algoritmanın da olabildiğince etkin olması bekleniyor.
Algoritma:
int minNegativeIndex = 0; // en son negatif sayı ataması yapılan dizi indexi
int temp;
for (int i = 0; i < dizi.Length; i++)
{
if (dizi[i] < 0)
{
// swap (dizi[i],dizi[minNegativeIndex])
temp = dizi[i];
dizi[i] = dizi[minNegativeIndex];
dizi[minNegativeIndex] = temp;
// swap (dizi[i],dizi[minNegativeIndex])
minNegativeIndex++;
}
}
Bir tane en son negatif sayı ataması yapılan dizi indexini tutacak olan minNegativeIndex değişkeni tanımlandı ve ilk değer olarak 0 atandı. Sonra for döngüsü ile her eleman için negatif olup olmadığı kontrol ediliyor ve negatif ise o sayı ile en son negatif sayı ataması yapılan sayının +1 indexindeki sayı değiştiriliyor. Sonunda ise negatifler baş tarafta, pozitifler son tarafta toplanıyor.
Son olarak, bu sorunun farklı bir çözümü veya daha etkili bir algoritması varsa yorumlarınızı bekliyorum.