选择排序

选择排序(交换排序):

  选择最小的,从前往后排,每一轮找出(除前面排好的)剩下元素中最小的值与当前值进行交换。

  由于找的是最小的数,如果有两个相同的最小数,那么靠后数就会被交换到前面,所以显然选择排序是不稳定的

  比较简单,看了前面的冒泡排序,链表也没必要了,直接上代码:

  

 public static void selectSort(int[] nums) {
         for (int i = 0; i < nums.length - 1; i++) {
             int min = nums[i];//定义最小值
             int index = i;//记录最小值的索引位置
    //下面就是寻找i+1到length中最小的值
             for (int j = i + 1; j < nums.length; j++) {
                 if (nums[j] < min) {//寻找最小的数
                     min = nums[j];
                     index = j;//最小值的索引
                 }
             }
             if (index != i) {//如果当前值不是最小值,那么就将它与最小值交换
                 nums[index] = nums[i];
                 nums[i] = min;
             }
         }
     }

测试:

  8万随机数(0—1000万)排序时间:  

  after-before=4700ms

  时间复杂度为:均为O(n2)         空间复杂度:O(1)     该算法不稳定

原文地址:https://www.cnblogs.com/taichiman/p/13268894.html