zoukankan      html  css  js  c++  java
  • 排序算法(二)选择排序

    1,算法描述

    选择排序(Selection-sort),首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    2,实现步骤

    • 初始状态:无序区为R[1..n],有序区为空;
    • 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
    • n-1趟结束,数组有序化了。

      实现

     1     private static void selectionSort(int[] a) {
     2         long start = System.nanoTime();  
     3         int len = a.length;
     4         int minIndex = 0;
     5         for(int i = 0; i < len - 1; i++){//循环n-1次,每次从未排序序列中找个最小值交换到已排序序列尾部
     6             minIndex = i;
     7             for(int j = i; j < len -1; j++){//从未排序的序列中找到最小值
     8                 if(a[minIndex] > a[j]){
     9                     minIndex = j;
    10                 }                
    11             }
    12             swap(a,minIndex,i);//把找到的最小值换到已排序序列的尾部
    13         }
    14         long end = System.nanoTime();
    15         System.out.println((end - start)/1000.0 + "us");
    16     }
    17 
    18     private static void swap(int[] a, int j, int i) {
    19         int temp = a[j];
    20         a[j] = a[i];
    21         a[i] = temp;        
    22     }

    3,算法分析

    时间复杂度:

    最佳情况:T(n) = O(n^2)

    最差情况:T(n) = O(n^2)

    平均情况:T(n) = O(n^2)

    空间复杂度:

    占用常数的额外空间,所以空间复杂度为O(1)

    稳定性:不稳定

    参考:

    http://www.cnblogs.com/eniac12/p/5329396.html

  • 相关阅读:
    中文词频统计
    复合数据类型,英文词频统计
    字符串、文件操作和英文词频统计预处理
    大数据应用期末总评Hadoop综合大作业
    hadoop平台上HDFS和MAPREDUCE的功能、工作原理和工作过程
    hadoop平台上HDFS和MAPREDUCE的功能、工作原理和工作过程
    分布式文件系统HDFS练习
    安装关系型数据库MySQL和大数据处理框架Hadoop
    爬虫综合大作业
    爬取全部的校园新闻
  • 原文地址:https://www.cnblogs.com/xdyixia/p/9138508.html
Copyright © 2011-2022 走看看