原理:
选择排序就是在一堆数中先拿出第一个与后面的比较,找到后面最小(大)的一个进行交换位置,确定第一个数,然 后 拿出第二个数与后面的比较,找到后面最小(大)的一个进行交换位置,确定第二个数,依次下去得到正确的排序。
Example:
49 38 65 97 76 13 27 49
第1次:13 38 65 97 76 49 27 49
第2次:13 27 65 97 76 49 38 49
第3次:13 27 38 97 76 49 65 49
第4次:13 27 38 49 76 97 65 49
第5次:13 27 38 49 49 97 65 76
第6次:13 27 38 49 49 65 97 76
第7次:13 27 38 49 49 65 76 97
Code:
int[] arr = {1, 3, 2, 45, 65, 33, 12};
System.out.println("交换之前:");
for (int num : arr) {
System.out.print(num + " ");
}
//选择排序的优化
for (int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
int k = i;
for (int j = k + 1; j < arr.length; j++) {// 选最小的记录
if (arr[j] < arr[k]) {
k = j; //记下目前找到的最小值所在的位置
}
}
//在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
if (i != k) { //交换a[i]和a[k]
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
System.out.println("交换后:");
for (int num : arr) {
System.out.println(num + " ");
}
}
System.out.println();