Java: Tömb megfordítása helyben

Programozással kapcsolatos cikkek / Java (2377 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