选择排序(select sort)是一种简单直观的排序算法

    基本思想
    每趟从待排序的记录中选出关键字最小(最大)的记录,顺序放在已排序的记录序列末尾,直到全部排序结束止。
    算法分析
    选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。
    时间复杂度
    选择排序的时间复杂度是 选择排序 - 图1
    时间复杂度
    O(1),只需要一个附加程序单元用于交换
    注意:**
    稳定性:选择排序是不稳定的排序算法,因为无法保证值相等的元素的相对位置不变,例如 [3, 4, 3, 1, 5]这个数组,第一次交换,第一个3和1交换位置,此时原来两个3的相对位置发生了变化。

    1. public static void selectSort(int[] arr) {
    2. if (arr == null || arr.length < 2) return;
    3. for (int i = 0; i < arr.length - 1; i++) {
    4. int minIndex = i;
    5. for (int j = i + 1; j < arr.length; j++) {
    6. if (arr[j] < arr[minIndex]) {
    7. minIndex = j;
    8. }
    9. }
    10. if (i!=minIndex){
    11. arr[i]=arr[i]^arr[minIndex];
    12. arr[minIndex]=arr[i]^arr[minIndex];
    13. arr[i]=arr[i]^arr[minIndex];
    14. }
    15. }
    16. }