原理
图
基本思想
1)第一次从arr[0]~arr[n - 1]中选择一个最小的数与arr[0]进行交换。
2)第二次从arr[1]~arr[n - 1]中选择一个最小的数与arr[1]进行交换。
…
3)第n - 1次,从arr[n - 2]~arr[n - 1]中选择一个最小的数与arr[n - 2]交换。
总结:从数组中每次寻找一个最小的数,依次按照数组的下标位置进行排序。一共需要n - 1次
代码实现
package sort排序;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class SelectSort {
public static void main(String[] args) {
int[] array = {3,4,9,6,5};
selectSort(array);
System.out.println(Arrays.toString(array));
// int[] arr = new int[80000];
// for (int i = 0; i < 80000; i++) {
// arr[i] = (int)(Math.random()*80000);
// }
//
//
// //可以用时间来判断算法的性能
// Date date1 = new Date();
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH-mm-ss");
// String date1Str = simpleDateFormat.format(date1);
// System.out.println("排序前的时间"+date1Str);
//
// selectSort(arr);
//
// Date date2 = new Date();
// String date2Str = simpleDateFormat.format(date2);
// System.out.println("排序前的时间"+date2Str);
}
//选择排序时间复杂度为O(n的平方)
public static void selectSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
int minIndex = i;
int min = array[i];
for (int j = i + 1; j < array.length; j++) {
if (min > array[j]) { //如果是小于号,那么就会从大到小排序
minIndex = j;
min = array[j];
}
}
//场景:如果第二数正好是最小的数,就放在原位
//交换顺序
if(minIndex != i){
array[minIndex] = array[i];
array[i] = min;
}
}
}
}
声明
本文是作者在学习数据结构中的一些笔记,希望能够帮助到大家。作者才疏学浅,如有错误,欢迎批评指正。