public class SimpleSelectSort {
public static void main(String[] args) {
int a[] = { 3, 1, 5, 7, 2, 4, 9, 6, 10, 8 };
System.out.print("初始值:");
print(a);
selectSort(a);
System.out.print("\n排序后:");
print(a);
}
public static void print(int a[]) { // 打印方法
for (int i = 0; i < a.length; i++) {
if (i == 0) {
System.out.print("[");
} else if (i == a.length - 1) {
System.out.print(a[i] + "]");
break;
}
System.out.print(a[i] + " ");
}
}
public static void selectSort(int[] a) { //简单排序方法
for (int i = 0; i < a.length; i++) {
int k = i; // k存放最小值下标。每次循环最小值下标+1
for (int j = i + 1; j < a.length; j++) { // 找到最小值下标
if (a[k] > a[j])
k = j;
}
swap(a, k, i); // 把最小值放到它该放的位置上
}
}
public static void swap(int[] a, int i, int j) { //交换数组中的两个数
if (i == j) {
return;
}
a[i] = a[i] + a[j];
a[j] = a[i] - a[j];
a[i] = a[i] - a[j];
}
}
解析版本:
解析版本不用看,直接复制到eclipse,运行,辅助理解。
public class ParseSimpleSelectSort {
public static void main(String[] args) {
int a[] = { 3, 1, 5, 7, 2, 4, 9, 6, 10, 8 };
System.out.print("初始值:");
print(a);
selectSort(a);
System.out.print("\n排序后:");
print(a);
}
public static void print(int a[]) { // 打印方法
for (int i = 0; i < a.length; i++) {
if (i == 0) {
System.out.print("[");
} else if (i == a.length - 1) {
System.out.print(a[i] + "]");
break;
}
System.out.print(a[i] + " ");
}
}
public static void selectSort(int[] a) {
System.out.println("\r\n交换过程:");
for (int i = 0; i < a.length; i++) {
int k = i; // k存放最小值下标。每次循环最小值下标+1
for (int j = i + 1; j < a.length; j++) { // 找到最小值下标
System.out.print(" 当前数组:"); // 输出过程
print(a); // 输出过程
System.out.println("\t本轮当前最小值为:" + "a[" + k + "]:" + a[k] + "\t比对元素:" + "a[" + (j) + "]:" + a[j]); // 输出过程
if (a[k] > a[j])
k = j;
}
swap(a, k, i);// 把最小值放到它该放的位置上
}
}
public static void swap(int[] a, int i, int j) { //交换数组中的两个数
if (i == j) {
return;
}
a[i] = a[i] + a[j];
a[j] = a[i] - a[j];
a[i] = a[i] - a[j];
System.out.println(" 交换成功!");
if (j != a.length - 2) {
System.out.println("\r\n 开始下一轮比对:");
}
}
}