Java选择排序

123 阅读1分钟

思路:

  1. 维护以下定义:
  • 数组[0..i)始终是排好序的。
  • 数组[0..i)中的每一个数均不大于数组[i..n - 1]中的数
  1. 每次从 i 右边的数取出最小的数放在i处
  2. i初识为0,每次递增1

复杂度

  • 时间复杂度:平均n2, 最坏n2, 最好n
  • 空间复杂度:1

代码

/**
 * 选择排序
 */
public class SelectSort {
    public static <T extends Comparable> void sort(T[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            //从剩下的元素中挑出最小的那一个
            for (int j = i; j < arr.length; j++)
                if (arr[j].compareTo(arr[minIndex]) < 0)
                    minIndex = j;
            //和当前位置交换
            T temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
        }
    }
}