/**
* 选择排序
* 1、选择排序共有n-1轮排序
* 2、每一轮排序,又是一个循环
* <p>
* 2.1先假定当前这个数是最小数
* 2.2然后和后面的每个数进行比较,如果发现有比当前数更小的数,就重新确定最小数,得到下标
* 2.3当遍历到数组的最后时,就得到本轮最小数和下标
* 2.3交换
*/
public class SelectSort {
public static void main(String[] args) {
//1、测试排序
System.out.println("测试一:");
int[] arr2 = {101, 34, 119, 1, 22, 10};
System.out.println("排序前的数组" +Arrays.toString(arr2));
selectSort(arr2);
System.out.println("排序后的数组" + Arrays.toString(arr2));
//2、测试8万个数据的排序时间
System.out.println("测试二:");
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random() * 800000);//[0,800000)
}
Date date1 = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = dateFormat.format(date1);
System.out.println("排序前的时间" + format);//排序前的时间2020-09-07 15:00:36
selectSort(arr);
Date date2 = new Date();
String format2 = dateFormat.format(date2);
System.out.println("排序后的时间" + format2);//排序后的时间2020-09-07 15:00:41
}
/**
* 选择排序
* 时间复杂度:O(n^2)
*
* @param arr
*/
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
int min = arr[i];
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {//说明假定的最小值,并不是最小
min = arr[j];//重置最小值
minIndex = j;//重置最小索引
}
}
//交换
if (minIndex != i) {
arr[minIndex] = arr[i];//把当前值复制到最小索引位置
arr[i] = min;//第i轮最小值放到第i个位置上
}
}
}
}
选择排序
最新推荐文章于 2024-09-03 20:47:55 发布