选择排序(Selection sort)
是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
- 在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素
- 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换
- 在剩余的array[i]–array[n-2](array[i+1]–array[n-1])集合中,重复上述步骤,直到集合剩余1个元素
一组数据:7,4,5,9,8,2,1
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arr = new int[] {7,4,5,9,8,2,1};
selectSort(arr);
System.out.println(Arrays.toString(arr));
}
private static void selectSort(int[] arr){
//遍历所有数
for (int i = 0; i <arr.length ; i++) {
int minIndex=i;
//把当前数字和后一个数字依次比较,并记录下最小数下标
for (int j = i+1; j <arr.length ; j++) {
//如果后面比较的数比记录的最小的数小
if (arr[j]<arr[minIndex]){
//记录后一个数下标
minIndex=j;
}
}
如果最小的数和当前遍历数的下标不一致,说明下标为minIndex的数比当前遍历的数更小。
if (i!=minIndex){
int tmp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=tmp;
}
}
}
}
直接选择排序的特性总结:
- 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
- 时间复杂度:O(N^2)
- 空间复杂度:O(1)
- 稳定性:不稳定