选择排序分析

一.选择排序原理

  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);
    }
}

 测试结果如下

  

原文地址:https://www.cnblogs.com/ywb-articles/p/10674407.html