选择排序就是对数组进行扫描,每次扫描找出最小的元素,并将其提到元素的前面。

动图

http://www.sorting-algorithms.com/animation/20/random-initial-order/selection-sort.gif

代码

public class Selection {
    public static void sort(Comparable[] li) {
        for(int i = 0; i < li.length; i++) {
            int min = i;
            for(int j = i+1; j < li.length; j++) {
                if(SortUtil.less(li[j], li[min])) {
                    min = j;
                }
            }
            SortUtil.exch(li, min, i);
        }
    }
}

第6行:注意j=i+1。由于已经将i赋值给min了。不是必需再将li[i]与li[j]比較。

命题

选择排序使用了约N^2/2次比較。使用了N次交换。

长处

排序算法的执行时间和输入无关,都是N^2复杂度。

数据的交换次数是最少的,都是N次交换。

普林斯顿公开课 算法2-2:选择排序相关推荐

  1. 普林斯顿公开课 算法1-5:算法理论

    本节主要解说的是算法的复杂度. 算法性能 算法的性能分为三种: 最佳情况:计算时间最短的情况 最差情况:计算时间最长的情况 平均情况:随机输入的期望开销 以二分查找为例 最佳情况是1,由于第一次就有可 ...

  2. Java常见排序算法之直接选择排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  3. 排序算法:简单选择排序算法实现及分析

    简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...

  4. java选择排序代码_Java排序算法总结之选择排序

    本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...

  5. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  6. js排序算法详解-选择排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-选择排序 相对于冒泡排序还有一种类似的方法就是选择排序,顾名思义就是选择性排序,什么意思呢? 这么来理解,假设 ...

  7. 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序

    <数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...

  8. 排序算法六:选择排序之直接选择排序

    排序算法六:选择排序之直接选择排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评& ...

  9. 总结c语言基础算法——冒泡排序法和选择排序法

    1.首先无论何种排序方法其最终目的是按要求将所给数据进行排序.而在C语言中可以有很多排序的方法,这里着重介绍的是常用的较为基础和重要的算法--冒泡排序法和选择排序法. 下面将举一个例子进行讲解: 要求 ...

最新文章

  1. python 线程锁 共享全局变量 线程通信
  2. 鸿蒙系统开发者公测,公测尝鲜开启!华为Mate40/P40开始和安卓渐行渐远
  3. 前端自动化测试工具:SlimerJS、phantomJS 和 CasperJS
  4. LeetCode 1360. 日期之间隔几天(闰年判断)
  5. 20 Alarms, sigaction(), and Reentrant System Calls
  6. 关于python注释下面选项描述错误的是_关于Python的列表,以下选项中描述错误的是______...
  7. Matlab程序如何打包
  8. servlet返回json到html页面,使用easyui从servlet传递json数据到前端页面的两种方法
  9. kuangbin专题
  10. visual foxpro v6.0官方版
  11. 面试时如何做自我介绍?聪明的应聘者只聚焦1点
  12. 牛客网Verilog快速入门题目收获——异步复位的串联T触发器(VL2)
  13. 华为OD机试 - 乱序整数序列两数之和绝对值最小
  14. RuntimeError: Couldn‘t resolve requests
  15. FreeRTOS软件定时器 基于STM32
  16. linux VFS概述以及内核源代码分析
  17. 鸿蒙宴中座次理解错的是,鸿门宴的座位安排用意是什么
  18. ecg 幅度_ECG原理与综述.ppt
  19. 攻防世界-misc-流量分析1
  20. 知到网课营养与食疗学题库及真题答案

热门文章

  1. [C++基金会]位计算 游戏开发中的应用
  2. RabbitMQ学习二
  3. ulimit问题 关于nproc设置
  4. 安全网关之三:IPTables
  5. linux iptables 端口 防火墙 规则
  6. hibernate 级联删除
  7. 写个函数用来对二维数组排序
  8. ASP.NET 应用程序遭遇Server Application Unavailable问题的解决的方法
  9. L1-036 A乘以B
  10. 《数学之美》——第三章 个人笔记