zoukankan      html  css  js  c++  java
  • 选择排序

    选择排序(Java)

    声明:本文参考https://blog.csdn.net/gisboygogogo/article/details/107554216

    一、原理

      每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序

    二、时间复杂度

      时间复杂度为O(n^2)

    三、代码实现(已优化)

     1 public static void selectSort(int[] arr){
     2  
     3         int min = 0; 
     4         int minIndex = 0; 
     5  
     6         //选择排序时间复杂度是 O(n^2)
     7         //算法就是先简单让后复杂。先把一个复杂算法,拆分成简单的问题,然后逐步解决
     8         for(int i=0; i< arr.length-1; i++){
     9             
    10             min = arr[i]; //假定最小值
    11             minIndex = i; //假定最小值的索引
    12  
    13             for(int j=i+1; j<arr.length; j++){ //这里是整个数组的长度,因为要遍历整个数组的所有数,找到最小的那个,从第 i+1 个元素开始
    14                 if(min > arr[j]){ //说明min不是假定的最小值 arr[j]比 min还小
    15                     min = arr[j]; //重置min,让min重返最小值,找到该轮的最小值
    16                     minIndex = j; //重置minIndex,找到该轮的最小值索引
    17                 }
    18             }
    19  
    20             //将最小值 放在 arr[0],即交换
    21             //如第一轮下来 i=0时,min = 1, minIndex = 3
    22             if(minIndex != i){ //这里是优化的代码,如果minIndex没有发生改变,就不执行里面得的代码
    23                 arr[minIndex] = arr[i]; //把 第i轮循环开始的,第一个元素 放到下标 minIndex 最小值那个位置上(第一轮 arr[3] = arr[0], 将111放在1那个位置)
    24                 arr[i] = min; //第一轮的时候,此时min = 1 是最小值,arr[0] = 1, 把第一个元素设置成最小值
    25             }
    26  
    27             System.out.println("第" + (i+1) +"轮候后:");
    28             System.out.println(Arrays.toString(arr));
    29         }
    30     }
  • 相关阅读:
    【Codechef】Chef and Bike(二维多项式插值)
    USACO 完结的一些感想
    USACO 6.5 Checker Challenge
    USACO 6.5 The Clocks
    USACO 6.5 Betsy's Tour (插头dp)
    USACO 6.5 Closed Fences
    USACO 6.4 Electric Fences
    USACO 6.5 All Latin Squares
    USACO 6.4 The Primes
    USACO 6.4 Wisconsin Squares
  • 原文地址:https://www.cnblogs.com/xiayiLL/p/15647793.html
Copyright © 2011-2022 走看看