Java: Tömb megfordítása helyben
Programozással kapcsolatos cikkek / Java (2378 katt)
A feladat a következő: adott egy tömb, amelyben az elemek sorrendjét meg kell fordítani. A műveletnek helyben kell történnie, azaz nem használhatunk egy másik tömböt a feladat megoldásához.
Pl. az [1,2,3,4,5] tömb megfordítva [5,4,3,2,1] lesz.
A feladat egy lehetséges megoldása a következő, amely egy for ciklus használatával először felcseréli az első (0. indexű) elemet az utolsóval, majd a másodikat az utolsó előttivel, stb.:
public static <T> void reverse(T[] array)
{
for (int i = 0; i < array.length / 2; i++)
{
T tmp = array[ i ];
array[ i ] = array[array.length - i - 1];
array[array.length - i - 1] = tmp;
}
}
Unit teszt az üres tömb esetére:
@Test
void reverseEmptyArray()
{
var array = new Integer[]{};
Algorithms.reverse(array);
assertArrayEquals(new Integer[]{}, array);
}
Unit teszt az egy elemű tömb esetére:
@Test
void reverseArrayWithOneElement()
{
var array = new Integer[]{1};
Algorithms.reverse(array);
assertArrayEquals(new Integer[]{1}, array);
}
Unit teszt páratlan elemszámú tömbre:
@Test
void reverseArrayWithOddElements()
{
var array = new Integer[]{1, 2, 3, 4, 5};
Algorithms.reverse(array);
assertArrayEquals(new Integer[]{5, 4, 3, 2, 1}, array);
}
Unit teszt páros elemszámú tömbre:
@Test
void reverseArrayWithEvenElements()
{
var array = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8};
Algorithms.reverse(array);
assertArrayEquals(new Integer[]{8, 7, 6, 5, 4, 3, 2, 1}, array);
}
Az előző tesztek Integer tömb felhasználásával készültek, most próbáljuk ki az algoritmust egy String tömbbel is:
@Test
void reverseStringArray()
{
var array = new String[]{"a", "b", "c"};
Algorithms.reverse(array);
assertArrayEquals(new String[]{"c", "b", "a"}, array);
}
A program teljes forrása megtalálható a GitHubon:
https://github.com/Kapitany777/ArrayAlgorithms
Előző oldal | Kapitány |