排序算法-选择排序
排序算法-选择排序
基本介绍
选择排序(select sorting)也属于内部排序,是从要排序的数据中,按指定的规则选出来某一元素,再按规定交换位置后达到排序的目的
排序思想
-
第一次从arr[0] ~ arr[n - 1]中选取最小值,与arr[0] 交换
-
第二次从arr[1] ~ arr[n - 1]中选取最小值,与arr[1] 交换
-
第i次...
-
第n - 1次从arr[n - 2] ~ arr[n - 1]中选取最小值,与arr[n - 2] 交换
-
总共通过 n - 1 次,得到一个从小到大的有序序列
代码实现
- 10 34 19 100 80 进行排序
package cn.imut.sort;
import java.util.Arrays;
//选择排序
public class SelectSort {
public static void main(String[] args) {
int[] arr = {101, 34, 119, 1, -1, 90, 123};
System.out.println("排序前");
System.out.println(Arrays.toString(arr));
selectSort(arr);
System.out.println("排序后");
System.out.println(Arrays.toString(arr));
}
public static void selectSort(int[] arr) {
for(int i = 0; i < arr.length - 1; i++) {
int minIndex = i; //最小值的索引,假定为0
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) { //i与假设最小值下标是重合的,只有交换才有区别
arr[minIndex] = arr[i];
arr[i] = min;
}
}
}
}
对选择排序进行速度测试
public static void main(String[] args) {
int[] arr = new int[80000];
for(int i = 0; i < 80000; i++) {
arr[i] = (int)(Math.random() * 8000000); //生成一个[0, 8000000)的数
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd 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);
}



浙公网安备 33010602011771号