如何“交换”数组中的两个值?

时间:2018-11-25 03:21:00

标签: java selection

我正在尝试编写选择排序算法。作为算法的一部分,我需要在数组中切换2个值,我尝试如下进行操作:array[min] = array[i]; array[i] = array[min];但我相信这不会起作用,因为array[min]已经是=到{{1 }}。那么我该如何进行交换?下面是我的代码。

array[i]

4 个答案:

答案 0 :(得分:3)

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

temp = array[min]    
array[min] = array[i]    
array[i] = temp

答案 1 :(得分:1)

您也可以在不使用temp变量的情况下交换值。示例代码如下:

例如:

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

现在

{{1}}

这里您可以避免使用temp变量。

答案 2 :(得分:1)

有多种交换方式:

  • 具有第三个临时变量

    temp = array[min];
    array[min] = array[i];
    array[i] = temp;
    

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

    array[min] = array[min] + array[i];
    array[i] = array[min] - array[i];
    array[min] = array[min] - array[i];
    

  • 没有临时变量(使用位操作)

    array[min] ^= array[i];
    array[i] ^= array[min];
    array[min] = array[i];
    
    这里的^是按位的XOR operator

答案 3 :(得分:1)

这看起来很有趣! 有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上进行了搜索以进行学习。 a great starting point to learn data structure and sorting.

还有一本很棒的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;
}