Sortowanie nie ma sensu w przypadku dwuwymiarowej tablicy ... czy to prawda?
Twoim zadaniem jest wziąć siatkę wejściową i zastosować do niej algorytm sortowania bąbelkowego, aż wszystkie wartości w siatce nie będą się zmniejszały od lewej do prawej i od góry do dołu wzdłuż każdego wiersza i kolumny.
Algorytm działa w następujący sposób:
- Każde przejście przechodzi rząd po rzędzie, od góry do dołu, porównując / zamieniając każdą komórkę z jej prawym i poniżej sąsiadów.
- jeśli komórka jest większa niż tylko jedna z jej prawej i poniżej sąsiadów, zamień na komórkę, która jest większa niż
- jeśli komórka jest większa niż jej prawa i poniżej sąsiadów, zamień na mniejszego sąsiada
- jeśli komórka jest większa niż jej prawa i dolna część sąsiadów, które mają tę samą wartość, zamień z dolnym sąsiadem.
- jeśli komórka nie jest większa niż którykolwiek z jej prawych i znajdujących się poniżej sąsiadów, nie rób nic
- Kontynuuj to, dopóki nie zostaną wykonane żadne zamiany podczas całego przejścia. Nastąpi to, gdy każdy wiersz i kolumna będą w porządku, od lewej do prawej i od góry do dołu.
Przykład
4 2 1
3 3 5
7 2 1
Pierwszy rząd przepustki zamieni 4 i 2, a następnie 4 z 1.
2 1 4
3 3 5
7 2 1
Kiedy otrzymamy środkową 3, zostanie ona zamieniona na 2 poniżej
2 1 4
3 2 5
7 3 1
Następnie 5 zostaje zamienionych na 1 poniżej
2 1 4
3 2 1
7 3 5
Ostatni rząd pierwszego przejścia przesuwa 7 do końca w prawo
2 1 4
3 2 1
3 5 7
Następnie wracamy do górnego rzędu
1 2 1
3 2 4
3 5 7
I kontynuuj rząd po rzędzie ...
1 2 1
2 3 4
3 5 7
... dopóki siatka nie zostanie „posortowana”
1 1 2
2 3 4
3 5 7
Inny przykład
3 1 1
1 1 1
1 8 9
staje się
1 1 1
1 1 1
3 8 9
zamiast
1 1 1
1 1 3
1 8 9
ponieważ zamiana w dół ma pierwszeństwo, gdy zarówno prawa, jak i niższa sąsiada komórki są równe.
Implementację referencji krok po kroku można znaleźć tutaj .
Przypadki testowe
5 3 2 6 7 3 1 0
3 2 1 9 9 8 3 0
3 2 2 8 9 8 7 6
staje się
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
staje się
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
Zasady
- Możesz wziąć siatkę wejściową w dowolnym dogodnym formacie
- Możesz założyć, że wszystkie wartości liczbowe są liczbami całkowitymi nieujemnymi w 16-bitowym zakresie bez znaku (0–65535).
- Możesz założyć, że siatka jest idealnym prostokątem, a nie poszarpaną tablicą. Siatka będzie wynosić co najmniej 2x2.
- Jeśli użyjesz innego algorytmu sortowania, musisz dostarczyć dowód, że zawsze będzie generował to samo zamówienie wynikowe, jak ta konkretna marka sortowania bąbelkowego 2D, bez względu na to, co jest wprowadzane. Spodziewam się, że będzie to nietrywialny dowód, więc prawdopodobnie lepiej będzie użyć opisanego algorytmu.
Wesołego golfa!