JavaRush/Java блог/Архив info.javarush/Ребят, накидайте, пожалуйста, кто нибудь разобранный (с п...
qzmi4meister
9 уровень

Ребят, накидайте, пожалуйста, кто нибудь разобранный (с построчными комментариями) код алгоритма инверсии массива от середины.

Статья из группы Архив info.javarush
участников
Три задачи висит с ним, нашел готовые алгоритмы, но не понимаю как они работают. Спасибо заранее.
Комментарии (8)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
AndreGold
Уровень 28
21 апреля 2015, 10:55
что значит инверсия массива с середины? Как вижу это я не придумывая «велосипеда».
Инверсия — это изменения порядка элементов в массиве на противоположный

// Выделяем память под массив и присваиваем переменной А ссылку на массив
        int A[] = new int[20];

        // Заполняем массив А[20] элементов
        for (int i = 0; i < A.length; i++)
        {
            A[i] = i;
        }

        System.out.println("Массив А :");
        for (Integer integer : A)
        {
            System.out.print(integer + " "); // Массив А : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
        }

        // Создадим 2 массива на 10 элементов
        int B[] = new int[10];
        int C[] = new int[10];

        //Заполним массив B первыми 10 элементами массива А
        for (int i = 0; i < B.length; i++)
        {
            B[i] = A[i];
        }

        System.out.println();
        System.out.println("Массив B :");
        for (Integer integer : B)
        {
            System.out.print(integer + " "); // Массив B : 0 1 2 3 4 5 6 7 8 9
        }

        // Заполним массив C последующими 10 элементами массива А, но для этого в цикле for нам нужны 2 переменные счетчики
        for (int i = 0, j = 10; i < C.length && j < A.length ; i++,j++)
        {
            C[i] = A[j];
        }

        System.out.println();
        System.out.println("Массив C :");
        for (Integer integer : C)
        {
            System.out.print(integer + " "); // Массив C : 10 11 12 13 14 15 16 17 18 19
        }

        // обнулим перезапишем элементы массива А
        for (int a = 0, b = B.length - 1, c = C.length - 1; (a < A.length && b >= 0) ||c >= 0; a++)
        {
            if (a < 10){
                A[a] = B[b];
                b--;
            }
            if (a >= 10){
AndreGold
Уровень 28
21 апреля 2015, 10:57
Вывод:
Массив А :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
Массив B :
0 1 2 3 4 5 6 7 8 9 
Массив C :
10 11 12 13 14 15 16 17 18 19 
Массив А инвертированный с середины:
9 8 7 6 5 4 3 2 1 0 19 18 17 16 15 14 13 12 11 10
qzmi4meister
Уровень 9
21 апреля 2015, 13:22
инверсия с середины выглядит примерно вот так
<code>public static int[] reverseArray(int[] array) {
        int count_arr = array.length;
        for (int i = 0; i < count_arr / 2; i++) {
            int tmp = array[i];
            array[i] = array[count_arr - 1 - i];
            array[count_arr - i - 1] = tmp;
        }
        return array;
    }</code>
у Вас, извиняюсь, дикая простыня получилась, хотя рабочая, да.
AndreGold
Уровень 28
21 апреля 2015, 13:33
а я вообщем-то подумал, что инверсия, от середины, должна сначала инвертировать левую часть массива, а потом правую.
AndreGold
Уровень 28
21 апреля 2015, 13:34
естественно, что код, и в циклах можно заменить
int B[] = new int[10];
int C[] = new int[10];

на
int B[] = new int[A.length/2];
int C[] = new int[A.length/2];

в циклах, выполнить тоже самое
timurnav
Уровень 21
23 апреля 2015, 02:46
как-то у вас сложно, ребят, по моему всё гораздо проще можно сделать :)
сдвиг массива, т.е. просто меняем местами:
Массив А :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
после того как поменяли местами
10 11 12 13 14 15 16 17 18 19 0 1 2 3 4 5 6 7 8 9
а потом реверс всего массива
9 8 7 6 5 4 3 2 1 0 19 18 17 16 15 14 13 12 11 10
AndreGold
Уровень 28
23 апреля 2015, 04:26
тогда извольте обьяснить, что сложного здесь?
Вывод:

Массив А:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Массив B:
0 1 2 3 4 5 6 7 8 9
Массив C:
10 11 12 13 14 15 16 17 18 19
Массив А инвертированный с середины:
9 8 7 6 5 4 3 2 1 0 19 18 17 16 15 14 13 12 11 10
igor
Уровень 25
21 апреля 2015, 08:33
Напиши свой алгоритм на листочке, тогда все будет проще.