选择排序~~~
文章目录
原理
手动逐步演示
import java.util.Arrays;
//选择排序
public class SelectSort {
public static void main(String[] args) {
int [] arr = {101, 34, 119, 1, -1, 90, 123};
//使用逐步推导的方式来,讲解选择排序
//原始的数组 : 101, 34, 119, 1
int minIndex = 0;
int min = arr[0];
//第 1 轮
for(int j = 0 + 1; j < arr.length; j++) {
if (min > arr[j]) {
//说明假定的最小值,并不是最小
min = arr[j]; //重置 min
minIndex = j; //重置 minIndex
}
}
//将最小值,放在 arr[0], 即交换
if(minIndex != 0) {
arr[minIndex] = arr[0];
arr[0] = min;
}
System.out.println("第 1 轮后~~");
System.out.println(Arrays.toString(arr));// [-1, 34, 119, 1, 101, 90, 123]
//第 2 轮
minIndex = 1; min = arr[1];
for (int j = 1 + 1; j < arr.length; j++) {
if (min > arr[j]) {
// 说明假定的最小值,并不是最小
min = arr[j]; // 重 置 min
minIndex = j; // 重置 minIndex
}
}
// 将最小值,放在 arr[0], 即交换
if(minIndex != 1) {
arr[minIndex] = arr[1];
arr[1] = min;
}
System.out.println("第 2 轮后~~");
System.out.println(Arrays.toString(arr));// [-1, 1, 119, 34, 101, 90, 123]
//第 3 轮
minIndex = 2; min = arr[2];
for (int j = 2 + 1; j < arr.length; j++) {
if (min > arr[j]) {
// 说明假定的最小值,并不是最小
min = arr[j]; // 重 置 min
minIndex = j; // 重置 minIndex
}
}
// 将最小值,放在 arr[0], 即交换
if (minIndex != 2) {
arr[minIndex] = arr[2];
arr[2] = min;
}
System.out.println("第 3 轮后~~");
System.out.println(Arrays.toString(arr));// [-1, 1, 34, 119, 101, 90, 123]
}
}
循环自动排序
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
//选择排序
public class SelectSort {
public static void main(String[] args) {
//创建要给 80000 个的随机的数组
int[] arr = new int[200000];
for (int i = 0; i < 200000; i++) {
arr[i] = (int) (Math.random() * 8000000); // 生成一个[0, 8000000) 数
}
System.out.println("排序前");
Date data1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormat.format(data1);
System.out.println("排序前的时间是=" + date1Str);
selectSort(arr);//20w数据15秒
Date data2 = new Date();
String date2Str = simpleDateFormat.format(data2);
System.out.println("排序后的时间是=" + date2Str);
}
//选择排序
public static void selectSort(int[] arr) {
//选择排序时间复杂度是 O(n^2)
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;
}
}
// 将最小值,放在 arr[0], 即交换
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
}
}
}
其他排序算法
插入排序:
https://blog.csdn.net/bell_love/article/details/106319609
选择排序:
https://blog.csdn.net/bell_love/article/details/106319578
希尔排序:
https://blog.csdn.net/bell_love/article/details/106319660
冒泡排序:
https://blog.csdn.net/bell_love/article/details/106317675
基数排序:
https://blog.csdn.net/bell_love/article/details/106319787
归并排序:
https://blog.csdn.net/bell_love/article/details/106319739
堆排序:
https://blog.csdn.net/bell_love/article/details/106319827