排序算法之 选择排序

先百度百科了解一下基本概念:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
这个可以跟着冒泡排序一起理解,相同的是它们都属于交换排序,冒泡比较的是两个相邻的数,交互彼此的位置,如大值往右放,从而一次排序下来,最大值会在最右边,,选择排序是在排序的数据中,直接一次遍历,选择最值放到顶端,只会交换一次值。
下面根据一段代码实例理解:

 public static void main(String[] args){
        int[] nums = {3,5,1,2,6,4};
        for (int i = 0; i < nums.length-1; i++) { // 从0 遍历到length-1,
            int minValue = i;
            for (int j = i+1; j < nums.length ; j++) {
                if (nums[i] > nums[j]){
                    minValue = j;  //在数组中找到最小数据,并记录下标
                }
            }
            // 当内层循环走完的时候,说明找到了比nums[0]还小的值 开始交换
            if (minValue != i){
                int temp = nums[minValue];
                nums[minValue]= nums[i];
                nums[i] = temp;
            }

        }
        for (int i = 0; i < nums.length; i++) {
            System.out.println(nums[i]);
        }
    }

算法复杂度:以上代码为例,如果全部都是正序,就不需要交换次数,N个数据,就需要遍历N次,时间复杂度为O(n),
最复杂情况,数据全部倒序:则第一次内循环比较N - 1次,然后是N-2次,N-3次,……,最后一次内循环比较1次。
共比较的次数是 (N - 1) + (N - 2) + … + 1,求等差数列和,得 (N - 1 + 1)* N / 2 = N^2 / 2。
舍去最高项系数,其时间复杂度为 O(N^2)。

发布了11 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/love_gzd/article/details/81489546