如何 "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 本书免费涵盖了这些内容
我查看了我的 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;
}
我正在尝试编写一个选择排序算法。作为算法的一部分,我需要在数组中切换 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 本书免费涵盖了这些内容
我查看了我的 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;
}