如何 "swap" 数组中的两个值?

How to "swap" two values in an array?

我正在尝试编写一个选择排序算法。作为算法的一部分,我需要在数组中切换 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];
            }
        }
    }

需要一个临时内存位置来存储值。

temp = array[min]    
array[min] = array[i]    
array[i] = 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

这里可以避免使用临时变量

交换的方式有很多种:

  • 加上第三个临时变量

    temp = array[min];
    array[min] = array[i];
    array[i] = temp;
    </pre>

  • 没有临时变量(使用加法)

    array[min] = array[min] + array[i];
    array[i] = array[min] - array[i];
    array[min] = array[min] - array[i];
    </pre>

  • 没有临时变量(使用位运算)

    array[min] ^= array[i];
    array[i] ^= array[min];
    array[min] = array[i];
    </pre>
    这里 ^ 是按位 XOR operator.

这看起来很有趣! 任何大 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 classes 中没有涉及排序,我用谷歌搜索来学习它。 a great starting point to learn data structure and sorting.

还有一本很棒的 java 7 本书免费涵盖了这些内容

javanotes

我查看了我的 Java 7 class 我在这里使用了这段代码

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;
}