我只是想知道当方法选择、插入、气泡返回无效时,这段代码仍然如何工作。 是因为方法是静态的还是什么?
此外,如何在不进行异或运算的情况下交换变量?
public class Sorts {
static int[] a = { 100, 90, 70, 60, 50, 40, 30, 20, 10, 7, 6, 5, 4, 3, 2, -1 };
public static void main(String[] args) {
// TODO Auto-generated method stub
bubbleSort(a);// Worst one
print(a);
int[] b = {100, 90, 70, 60, 50, 40, 30, 20, 10, 7, 6, 5, 4, 3, 2, -1};
MY_SEMI_SELECTION_Sort(b);
print(b);
int[] e = { 100, 90, 70, 60, 50, 40, 30, 20, 10, 7, 6, 5, 4, 3, 2, -1};
selectionSort2(e);
print(e);
int[] c = {100, 90, 70, 60, 50, 40, 30, 20, 10, 7, 6, 5, 4, 3, 2, -1};
insertionSort(c); // The best so far
print(c);
}
static void insertionSort(int[] arr) {
int len = arr.length;
for (int i = 1; i < len; ++i) {
int j = i;
while (j > 0 && arr[j] < arr[j - 1]) {
// Swap
arr[j] ^= arr[j - 1] ^= arr[j];
arr[j - 1] ^= arr[j];
--j;
}
}
}
static void MY_SEMI_SELECTION_Sort(int[] arr) {
int len = arr.length;
for (int i = 0; i < len; ++i) {
for (int k = i; k < len - 1; ++k) {
if (arr[i] > arr[k + 1]) {
// Swapping........
arr[i] ^= arr[k + 1] ^= arr[i];
arr[k + 1] ^= arr[i];
}
}
}
}
static void selectionSort2(int[] arr) {
int len = arr.length;
for (int i = 0; i < len; ++i) {
int k;
int minIndex = i;
for (k = i; k < len - 1; ++k) {
if (arr[minIndex] > arr[k + 1]) {
minIndex = k + 1;
}
}
if (arr[minIndex] != arr[i]) {
arr[minIndex] ^= arr[i] ^= arr[minIndex];
arr[i] ^= arr[minIndex];
}
}
}
static void bubbleSort(int[] arr) {
int len = arr.length;
for (int i = 0; i < len; ++i) {
for (int k = 0; k < len - 1; ++k) {
if (arr[k] > arr[k + 1]) {
// Swapping........
arr[k] ^= arr[k + 1] ^= arr[k];
arr[k + 1] ^= arr[k];
}
}
}
}
static void swap(int a, int b) {
int temp = b;
b = a;
a = temp;
}
static void print(int[] arr) {
int len = arr.length;
for (int i = 0; i < len; ++i) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
最佳答案
Why are my methods working even though they return void?
Java 始终是按值传递的。但我们谈论的值(value)是什么?传递给函数的值是引用值,将其想象为数组所在的地址。因此,您始终在方法内部和外部引用相同的数组。
How to swap elements without Xoring them?
将变量想象成一个桶,你无法在不丢失其先前内容的情况下填充一个桶。您需要使用临时变量
int a=1,b=2;
int tmp=a;
a=b; //without the previous line of code you'd have lost the value of 'a'
b=tmp;
关于java - java中将变量传递给静态方法意外结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35829953/