-
选择排序比冒泡排序的效率高,高在交换位置的次数上,选择排序的交换位置是有意义的。
-
原始数据:3,1,6,2,5
-
循环一次,然后找出参加比较的这堆数据中最小(最大)的,拿着这个最小(最大)的值和
最前面的数据交换位置。-
第一次循环:3,1,6,2,5
- 结果:1,3,6,2,5
-
第二次循环:3,6,2,5
- 结果:2,6,3,5
-
第三次循环:6,3,5
- 结果:3,6,5
-
第四次循环:6,5
- 结果:5,6
-
5条数据循环4次
-
代码实现
-
public class SelectSort {
static int temp; // 交换点
public static void main(String[] args) {
int[] arr = {7, 8, 20, 39, 54, 28, 63, 14, 6, 0, 6, 45};
System.out.print("原顺序为:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
System.out.print("选择排序(小到大)后为:");
smallSelect(arr);
System.out.println();
System.out.print("选择排序(大到小)后为:");
bigSelect(arr);
}
// 小到大
public static void smallSelect(int[] arr) {
int Min;
for (int i = 0; i < arr.length; i++) {
Min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[Min] > arr[j]) {
//Min = arr[j];
Min = j;
}
}
int[] arr2 = swap(arr, i, Min);
if(i == arr.length - 1){
printArr(arr2);
}
}
}
// 大到小
public static void bigSelect(int[] arr) {
int Max;
for (int i = 0; i < arr.length; i++) {
Max = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[Max] < arr[j]) {
//Max = arr[j];
Max = j;
}
}
int[] arr2 = swap(arr, i, Max);
if(i == arr.length - 1){
printArr(arr2);
}
}
}
// 输出遍历
public static void printArr(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
// 元素位置交换
public static int[] swap(int[] arr, int i, int post){
temp = arr[post];
arr[post] = arr[i];
arr[i] = temp;
return arr;
}
}