排序-选择排序

思想

每一次遍历待排序的序列,记录最小(大)值的下标,和待排序第一个元素进行比较,如果小(大)与待排序第一个元素,交换
动图实现:(参考资料)


选择排序

实现(java)

/**
 * @Author: Numen_fan
 * @Date: 2019/3/1 下午9:05
 * @Version: 1.0
 * @Description:选择排序
 */
public class Main {

    public  static void main(String[] args) {

        int[] arr = {2,5,4,3,8,6,4};
        selectSort(arr);
        for (int i = 0; i< arr.length; i++){
            System.out.print(arr[i] + ",");
        }
    }

    /**
     * 选择排序
     * @param arr
     */
    private static void selectSort(int[] arr) {
        for (int i = 0,k =0; i < arr.length; i++, k = i){
            // 这一层查找后面最小值的下标
            for (int j = i+1; j <arr.length; j++) {
                if (arr[k] > arr[j]) {  // 这里改为 < 即为从大到小
                    k = j;
                }
            }
            // 交换值
            if( i != k) {
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }
        }
    }
}

分析

  • 时间复杂度:O(N^2)
  • 空间复杂度: O(1)
  • 稳定性: 不稳定

参考资料

http://p9.pstatp.com/large/pgc-image/153511583598984ab75e4cd

最后

此致,敬礼

推荐阅读更多精彩内容