Sıralama 2 boyutlu bir dizi için anlamsızdır ... ya da değil mi?
Göreviniz, bir giriş ızgarası almak ve ızgaradaki tüm değerler soldan sağa ve yukarıdan aşağıya doğru her satır ve sütun boyunca düşmeyene kadar kabarcık benzeri bir algoritma uygulamaktır.
Algoritma aşağıdaki gibi çalışır:
- Her geçiş sırayla, yukarıdan aşağıya doğru, her bir hücreyi sağ ve komşularının altında karşılaştırır / değiştirir.
- hücre sağından yalnızca bir tanesinden daha büyükse ve komşularının altından büyükse,
- hücre hem sağından hem de komşularının altındaysa, daha küçük komşuyla değiştirin
- hücre aynı değer olan hem sağ hem de komşularının altındaysa, aşağıdaki komşu ile değiştirin.
- hücre sağından ve komşularının altında değilse, hiçbir şey yapmayın
- Tüm geçiş boyunca takas yapılmayana kadar buna devam edin. Bu, her satır ve sütun sırayla, soldan sağa ve yukarıdan aşağıya doğru olacaktır.
Misal
4 2 1
3 3 5
7 2 1
Geçişin ilk satırı 4 ve 2'yi, sonra 4'ü 1 ile değiştirir.
2 1 4
3 3 5
7 2 1
Ortadaki 3'ü aldığımızda, aşağıdaki 2 ile değiştirilecek
2 1 4
3 2 5
7 3 1
Sonra 5 aşağıdaki 1 ile değiştirilir
2 1 4
3 2 1
7 3 5
İlk geçişin son satırı 7'yi tamamen sağa taşır
2 1 4
3 2 1
3 5 7
Sonra tekrar üst sıraya geri dönüyoruz
1 2 1
3 2 4
3 5 7
Ve satır satır devam edin ...
1 2 1
2 3 4
3 5 7
... ızgara "sıralanana" kadar
1 1 2
2 3 4
3 5 7
Başka bir örnek
3 1 1
1 1 1
1 8 9
olur
1 1 1
1 1 1
3 8 9
ziyade
1 1 1
1 1 3
1 8 9
çünkü aşağı doğru değişim, bir hücrenin hem sağ hem de alt komşuları eşit olduğunda öncelik kazanır.
Adım adım referans uygulaması burada bulunabilir .
Test senaryoları
5 3 2 6 7 3 1 0
3 2 1 9 9 8 3 0
3 2 2 8 9 8 7 6
olur
0 0 1 1 2 2 3 6
2 2 3 3 6 7 8 8
3 3 5 7 8 9 9 9
2 1 2 7 8 2 1 0
2 2 2 2 3 2 1 0
1 2 3 4 5 4 3 2
9 8 7 6 5 4 3 6
6 5 4 3 2 2 1 0
olur
0 0 0 1 1 1 2 2
1 1 2 2 2 2 2 2
2 2 2 2 3 3 3 3
3 4 4 4 4 5 6 6
5 5 6 7 7 8 8 9
kurallar
- Giriş ızgarasını istediğiniz herhangi bir biçimde alabilirsiniz
- Izgara değerlerinin işaretsiz 16 bitlik aralıkta (0-65535) negatif olmayan tamsayı olduğunu varsayabilirsiniz.
- Izgaranın pürüzlü bir dizi değil, mükemmel bir dikdörtgen olduğunu varsayabilirsiniz. Izgara en az 2x2 olacaktır.
- Başka bir sıralama algoritması kullanırsanız , girdi ne olursa olsun, bu özel 2D kabarcık sıralama markasıyla her zaman aynı sonuç sırasını üreteceğine dair bir kanıt sağlamalısınız . Bunun önemsiz bir kanıt olmasını bekliyorum, bu yüzden açıklanan algoritmayı kullanmaktan daha iyi olursunuz.
Mutlu Golf!