我正在尝试编写选择排序算法。作为算法的一部分,我需要在数组中切换2个值,我尝试如下进行操作:array[min] = array[i]; array[i] = array[min];
但我相信这不会起作用,因为array[min]
已经是=
到{{1 }}。那么我该如何进行交换?下面是我的代码。
array[i]
答案 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书,涵盖了这些内容
我查找了我在这里使用过此代码的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;
}