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

    一.选择排序原理

      1.每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置

      2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到刚才已排序序列的后面。

      3.以此类推,直到全部待排序的数据元素排完。 

      选择排序是不稳定的排序方法。例如:序列3,3,2,1, 我们知道第一次遍历的时候,选择最后一个元素1和第一个元素3交换,那么原序列中2个3的相对前后顺序就和之前不一样了,所以选择排序不是一个稳定的排序算法。

    二.选择排序时间复杂度

      第一次循环比较 n - 1次,第二次循环比较 n - 2次,依次类推,最后一个元素不需要比较,因此共进行 n - 1次循环,最后一次循环比较1次。

      因此一共比较1 + 2 + 3 + ... +(n - 2)+(n - 1)次,求和得n2/2 - n / 2 ,忽略系数,取最高指数项,该排序的时间复杂度为O(n2)

    三.代码实现(Java)

    //实现选择排序
    public class Test02 {
      public static void main(String[] args) {
          int[] arr = {1,3,2,5,4,9,6};
          selectSort(arr);
          System.out.println(Arrays.toString(arr));
      }
      public static void selectSort(int[] arr){
          if((arr==null)||(arr.length==0)){
              try{
                throw new MyException("出现了数组为空的异常");
            } catch (MyException e) {
                e.printStackTrace();
            }
              return;
          }
          int minIndex = 0;//暂未排序的最小数据的下标
          int temp = 0;//将被交换位置的那个元素
          for(int i = 0 ; i < arr.length ; i++){
              minIndex=i;
              for(int j = i + 1 ; j < arr.length ; j++){//在暂未排序的区域中找到最小数据并保存其下标
                  if(arr[j]<arr[minIndex]){//两者中较小的元素的下标赋给minIndex
                      minIndex=j;
                  }
              }
              //将最小元素放到本次循环的前端
              temp=arr[i];
              arr[i]=arr[minIndex];
              arr[minIndex]=temp;
          }
      }
    }
    class MyException extends Exception{
        
        public MyException() {
        }
        public MyException(String msg) {
            super(msg);
        }
    }

     测试结果如下

      

  • 相关阅读:
    Linux学习-汇总
    前端学习-汇总
    人生苦短,我用python
    python_面试题_DB相关问题
    企业应用学习-git学习
    python基础-并发编程之I/O模型基础
    python_面试题_HTTP基础相关问题
    python_面试题_TCP的三次握手与四次挥手问题
    好的RESTful API的设计原则
    CSP-S2021 游记
  • 原文地址:https://www.cnblogs.com/ywb-articles/p/10674407.html
Copyright © 2011-2022 走看看