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

    选择排序

    概念:首先在未排序的数列中选择第一个元素,假设为最小值,然后遍历剩下的元素,与第一个元素比较;如果遍历中的元素小于最小值,则将最小值与该值交换,继续遍历。直到数列所有元素都被排序。

    优点:与数据移动相关。如果某个元素在其最终位置上,那么它不会移动。选择排序每次交换一对元素,就有一个元素被移动到其最终位置上,所以最多可能进行n-1次交换。

    Java 代码实现

     1 public class Selection
     2 {
     3 
     4     public static void main(String[] args)
     5     {
     6         Integer[] arr ={112,33,5,3,22,33,44,33,56,3,1,34,7,5,5,78,7,533,};
     7         selectionSort(arr);
     8         for(Integer i: arr)
     9         {
    10             System.out.print(i+" ");
    11         }
    12     }
    13     public static <T extends Comparable<? super T>>void selectionSort(T[] arr){
    14         T minKey;
    15         int minIndex;
    16         //从1开始寻找比min更小的元素
    17         for(int i = 0; i < arr.length; i++)
    18         {
    19             //假定第一个元素为最小值
    20             minIndex = i;
    21             //从1开始寻找比min更小的元素
    22             for(int j = minIndex+1; j < arr.length; j++)
    23             {
    24                 //比较次数:n+(n-1)+n-2+...+2+1 = n(n-1)/2
    25                 if(arr[j].compareTo(arr[minIndex]) < 0){
    26                     minIndex = j;
    27                 }
    28             }
    29             //找到遍历一次的最小值,进行交换
    30             //交换次数:0~(n-1)次之间
    31             minKey = arr[minIndex];
    32             arr[minIndex] = arr[i];
    33             arr[i] = minKey;
    34         }
    35     }
    36 }

     复杂度分析

    比较次数:n+(n-1)+(n-2)+...+2+1 = n(n-1) / 2;

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

    交换次数:0~(n-1)

    赋值次数:0~3(n-1)

    因为交换所需要的cpu时间比比较所需要的时间多,而且选择排序比冒泡排序交换次数少了很多。

    所以当n值较小的时候,选择排序快于冒泡排序。

  • 相关阅读:
    上云,你真的只差一本葵花宝典
    Linux Kernel 4.11首个候选版本开放下载
    Windows 10 host where Credential Guard or Device Guard is enabled fails when running Workstation (2146361)
    .NET技术+25台服务器怎样支撑世界第54大网站
    Azure 订阅和服务限制、配额和约束
    python再议装饰器
    python的上下文管理器-1
    python的上下文管理器
    python小知识点
    python做简易记事本
  • 原文地址:https://www.cnblogs.com/wangziqiang/p/3611781.html
Copyright © 2011-2022 走看看