一、基本介绍
选择排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。
二、选择排序思想
原始的数组 : 101, 34, 119, 1
第一轮排序 : 1, 34, 119, 101
第二轮排序 : 1, 34, 119, 101
第三轮排序 : 1, 34, 101, 119 说明:
1. 选择排序一共有 数组大小 - 1 轮排序
2. 每1轮排序,又是一个循环, 循环的规则(代码)
2.1先假定当前这个数是最小数
2.2 然后和后面的每个数进行比较,如果发现有比当前数更小的数,就重新确定最小数,并得到下标
2.3 当遍历到数组的最后时,就得到本轮最小数和下标
2.4 交换 [代码中再继续说 ]
三、代码实现
/**
* 选择排序: 从左到右依次寻找各个索引处对应的值,
* 每次遍历对应索引之后的所有数,找到最小值,
* 并与该索引处的值比较后看是否需要交换
*/
public class SelectionSort {
public static void main(String[] args) {
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random() * 100000);
}
long start = System.currentTimeMillis();
sort(arr);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
//时间复杂度为O(n^2)
private static void sort(int[] arr) {
int min;
int minIndex;
for (int j = 0; j < arr.length - 1; j++) {
min = arr[j];
minIndex = j;
for (int i = j + 1; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i];
minIndex = i;
}
}
arr[minIndex] = arr[j];
arr[j] = min;
}
// //第一轮从头开始找到里面最小的数,然后和0索引处的数交换位置
// int min = arr[0];
// int minIndex = 0;
// for (int i = 1; i < arr.length; i++) {
// if(min > arr[i]){
// min = arr[i];
// minIndex = i;
// }
// }
// arr[minIndex] = arr[0];
// arr[0] = min;
//
// System.out.println(Arrays.toString(arr));
//
// //第二轮从第二个数开始找到里面最小的数,然后和1索引处的数交换位置
// min = arr[1];
// minIndex = 1;
// for (int i = 2; i < arr.length; i++) {
// if(min > arr[i]){
// min = arr[i];
// minIndex = i;
// }
// }
// arr[minIndex] = arr[1];
// arr[1] = min;
//
// System.out.println(Arrays.toString(arr));
}
}