思路
代码
public static void main(String[] args) {
Integer[] arr = new Integer[]{1,1,3,5,2,1,2,4,-1,1,7};
selectSort(arr);
System.out.println(new ArrayList<>(Arrays.asList(arr)));
}
// 选择排序
public static Integer[] selectSort(Integer[] arr) {
for (int i = 0; i < arr.length-1; i++) {
int minIndex = i;
for (int j = i+1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
return arr;
}
总结
选择排序的整体思路和冒泡排序相同,都是一次遍历选出最大值(或最小值),然后第二次遍历,则遍历除了上一次筛选的值之外的数组,选出第二大的,依此类推,当最后只剩一个值时终止操作。但相对来说,选择排序是再冒泡排序的基础上进行了优化,引入了一个额外的变量用于记录每次遍历的最大值(或最小值)的索引,在遍历结束时,才进行交换操作,整体来说,交换的次数较冒泡排序少很多,故整体性能优于冒泡排序。