Как «поменять» два значения в массиве? - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь написать алгоритм сортировки выбора.Как часть алгоритма, мне нужно переключить 2 значения в массиве, я попробовал это следующим образом: array[min] = array[i]; array[i] = array[min]; Но я верю, что это не сработает, потому что array[min] уже будет = до array[i].Так как мне сделать этот обмен?ниже мой код.

static int[] array = {3, 2, 1, 4, 5, 6};

static int n = 5;
static int temp;

        for (int i = 0; i<=5; i++) {
        int min = 0;

        for (int j = i+1; j<=n; j++) {
            //System.out.println(j);

            if (array[j]<array[min]) {
                min = j;
            }

            if (min != i) {
                array[min] = array[i];
                array[i] = array[min];
            }
        }
    }

Ответы [ 4 ]

0 голосов
/ 25 ноября 2018

Это похоже на веселье!Любые ограничения Big 0?Ограничения памяти?Если бы не я, я бы попробовал простую пузырьковую сортировку этого парня со свопом

public static void bubbleSort(int[] Database) {

        for (int i = arraySize -1; i > 0; i--) {

            for (int j = 0; j < i; j++) {

                if(Database[j] > Database[j+1]){

                    Swap(Database,j,j+1);
                    //ArrayPartition.DisplayTheArray(i, j)

                }
                Main.PrintHorizontalArray(i, j);

            }

        //  Main.PrintHorizontalArray(i, -1);
        }

    }

    public static void Swap(int[] database, int j, int i) {
        int temp = database[j];
        database[j] = database[i];
        database[i] = temp;

}

. Я взял бы ноль баллов за этот ответ, так как сортировка не рассматривалась в моих уроках Java в колледже, и я нашел его в Google, чтобы узнать его. отличная отправная точка для изучения структуры данных и сортировки.

Существует также большая бесплатная книга по Java 7, которая охватывает эти

javanotes

Я посмотрел свой класс Java 7, я использовал этот код здесь

public int[] selectionSort(int[] inarray) {

//int[] data = Arrays.copyOf(inarray, inarray.length);
int temp;
int n=inarray.length;
for (int i=0; i<inarray.length; i++){
int k=i;
for (int j=i+1;j < n;j++)
if (inarray[j]<inarray[k])
k=j;
temp = inarray[i];
inarray[i] = inarray[k];
inarray[k] = temp;
}
return data;
}
0 голосов
/ 25 ноября 2018

Вы также можете менять значения без использования переменной temp.Пример кода выглядит следующим образом:

Например:

array[min] = 10;
array[i] = 5;

Теперь,

array[min] = array[min] + array[i]; // array[min] = 15
array[i] = array[min] - array[i]; // array[i] = 10
array[min] = array[min] - array[i]; // array[min] = 5

Здесь вы можете избежать использования временной переменной.

0 голосов
/ 25 ноября 2018

Существует множество способов обмена:

  • С третьей временной переменной

    <code>temp = array[min];
    array[min] = array[i];
    array[i] = temp;
    
  • без временной переменной (с использованием сложения)

    <code>array[min] = array[min] + array[i];
    array[i] = array[min] - array[i];
    array[min] = array[min] - array[i];
    
  • без временной переменной (с использованием битовых операций)

    <code>array[min] ^= array[i];
    array[i] ^= array[min];
    array[min] = array[i];
    
    Здесь ^ - битовый оператор XOR .
0 голосов
/ 25 ноября 2018

Требуется временная ячейка для хранения значения.

, т. Е.

temp = array[min]    
array[min] = array[i]    
array[i] = temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...