0079 选择排序的“丑陋”

public class SelectSorting {
    public static void selectSort(int[] nums){
        if (null == nums || nums.length < 2)
            return;
        for (int i = 0; i < nums.length; i++){
            for (int j = i + 1 ; j < nums.length; j++){
                if (nums[j] < nums[i]){  //寻找最小元素放在 i 位置处
                    int tmp = nums[j];
                    nums[j] = nums[i];
                    nums[i] = tmp;
                }
            }
        }

    }
    //最好情况:数组已经有序,只做比较,不做交换,T(n)= n-1 + n-2 + ... + 1 = O(n^2)
    //最坏情况:数组逆序,做全部比较与交换,T(n)= 2(n-1 + n-2 + ... + 1) = O(n^2)
    //时间平均复杂度:O(n^2),空间复杂度:O(1)
    //不稳定
    //点评:选择排序思路是依次找最小元素,最后得到有序数组,其最好最坏情况都是O(^2)且不稳定且难以优化,所以这种排序最为“丑陋”,不过基于选择排序,可以得到一种更加有效的“堆排序”

    public static void main(String[] args){
        int[] nums = {2,0,1,9,1,0,2,8};
        selectSort(nums);
        for (int num: nums)
            System.out.print(num+" ");
    }
}

 

posted @ 2019-10-28 20:19  gendlee1991  阅读(18)  评论(0)    收藏  举报