概述
选择排序:
选择排序和冒泡排序一起记忆
选择排序的效率要比冒牌排序高,就是因为,选择排序交换数组元素的次数要比冒泡排序少得多。
思想:
- 每次循环找到,数组中最大或者最小元素的角标,记录下来
- 将最大或者最小的元素,放置在,本应该的位置(就是交换位置)
实现: - 和冒泡一样,只不过,选择排序是记录角标,循环结束才进行交换位置
- 我们需要假定,当前元素就是最大或者最下的元素
图示
没找到,自己想象吧
代码
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class selectSort {
/*
* 选择排序
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr1 = { 1, 4, 5, 7, 23, 4, 5, 67, 78 };
select(arr1);
System.out.println(Arrays.toString(arr1));
// 效率测试
int[] arr = new int[200000];
for (int i = 0; i < 200000; i++) {
arr[i] = (int) (Math.random() * 8000000); // 生成一个[0, 8000000) 数
}
Date data1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormat.format(data1);
System.out.println("排序前的时间是=" + date1Str);
// 测试冒泡排序
select(arr);
Date data2 = new Date();
String date2Str = simpleDateFormat.format(data2);
System.out.println("排序后的时间是=" + date2Str);
}
// 实现选择排序
public static void select(int[] arr) {
int index = 0;
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
index = i;//假定当前元素就是最小的
for (int j = i; j < arr.length; j++) {
if (arr[index] > arr[j]) {
index = j;
}
}
if (index != i) {
temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
}
}