1、选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。
2、但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。
3、内层每次确定一个最小数,一轮只换一次,最后一个不用比较
原地排序(不用额外空间)
不稳定
O(N2)
不稳定例子:比如 5,7,5,2,8 这样一组数据,使用选择排序算法来排序的话,第一次找到最小元素 2,与第一个 5 交换位置,那第一个 5 和中间的 5 顺序就变了,所以就不稳定了。正是因此,相对于冒泡排序和插入排序,选择排序就稍微逊色了。
package sort;
public class SelectSort {
public static void main(String[] args) {
int[] arr = {4,3,2,2,4,7};
selectSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void selectSort(int[] arr){
for (int i = 0; i < arr.length - 1; i++) {
int min=i;
//内层每次确定一个最小数的下标,最后一个不用比较
for (int j = i+1; j < arr.length-1 ; j++) {
min=arr[j]<arr[min]?j:min;
}
//一轮只换一次
swap(arr,min,i);
}
}
public static void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}