一、基本介绍
选择排序也属于内部排序法,是从想排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的
二、选择排序的思想
代码实现:
public static void getSelectSort(int[] array){
for(int j = 0; j < array.length-1; j++){
int minIndex = j;
int min = array[j];
for (int i = 1+j; i < array.length; i++) {
if (min > array[i]) { //说明假定的最小值并不是最小值
min = array[i]; //重置min
minIndex = i; //重置minIndex
}
}
if(minIndex != j) {
array[minIndex] = array[j];
array[j] = min;
}
}
}
测试:
public static void main(String[] args) {
int[] array = {34,32,67,5,-2,342,45};
System.out.println("排序前"+Arrays.toString(array));
getSelectSort(array);
System.out.println("排序后"+Arrays.toString(array));
}
结果:
测试速度并且与冒泡排序做比较
public static void main(String[] args) {
int[] array = new int[80000];
for(int i = 0; i < 80000; i++){
array[i] =(int) (Math.random() * 80000); //生成一个[0,80000)数
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String data1Str = simpleDateFormat.format(date1);
System.out.println("排序前的时间:"+data1Str);
getSelectSort(array);
Date date2 = new Date();
String data2Str = simpleDateFormat.format(date2);
System.out.println("排序前的时间:"+data2Str);
}
结果:
同样的80000个数据,大概是3秒,而冒泡排序用了10秒多