选择排序改进了冒泡排序,所改进的是排序时交换的次数,并没有改进比较的次数。在大批量数据排序的时候,选择排序中对于交换数据的时间和比较的时间来说,很显然,数据交换和移动的时间更为重要(一般来说,Java中不是这种情况,Java中只是改变了引用的位置,而实际对象的位置并未发生改变)

用选择排序对篮球队员进行排序:

进行选择排序就是把所有的队员扫描一遍,找到其中最低的队员,让他与最左边的队员(0号位置)进行交换(如果最左边的队员就是最低的,那么不进行交换)。这样最左边的队员就是有序的状态,不需要再次交换位置了。注意,这个算法中呢,有序的都排列在队伍的最左边,与冒泡排序相反(冒泡排序是从最右边)。再次扫描队列时,就是从1号位置开始,也是找到最矮的,与队列的1号位置进行交换,那么依次下去,一直持续到整个顺序排列完成。

第一次扫描:

第二次扫描:

第三次扫描:

依次如图所示。

接下来上代码:

public class selectSort {
    private long[] a;
    private int nElems ;
    public selectSort(int max) {
        a = new long[max];
        nElems = 0;
    }
    public void insert(long value) {
        a[nElems] = value;
        nElems++;
    }
    
    public void display() {
        for (int i = 0; i < nElems-1; i++) {
            System.out.println(a[i]+"");
        }
        System.out.println("");
    }
    
    public void swap(int one , int two) {
        long temp = a[one];
        a[one] = a[two];
        a[two] = temp;
    }
    
    public void selectSortApp() {
        int min ,in ,out ;
        for ( out = 0; out < nElems-1; out++) {
            min = out ;
            for ( in = out+1; in < nElems; in++) {
                if(a[in]<a[min]){
                    min = in;
                }
            }
            swap(out, min);
        }
    }
}

out:用来记录外层循环,从数组开头0开始,依次增长。

in:用来记录内层循环,找到每一轮的最矮队员,并将他与这一轮起始的队员进行交换。

min:用来记录当前最矮的队员。

选择排序的效率:选择排序与冒泡排序进行了同样次数的比较,N*(N-1)/2,但是一列数组如果有10个数据项,只需要少于10次的比较就可以了。如果数据量N约大,那么选择排序就会比冒泡排序节省很多时间(在数据交换位置上节省),数据量很小的情况下,两者相当。

java排序之选择排序相关推荐

  1. 【02】Java进阶:09-冒泡排序、选择排序、二分查找、异常、异常的产生和处理、自定义异常、多线程

    day09[排序算法.异常.多线程基础] 今日内容 冒泡排序 选择排序 二分查找 异常处理 多线程基础 教学目标 能够理解冒泡排序的执行原理 能够理解选择排序的执行原理 能够理解二分查找的执行原理 能 ...

  2. Java排序算法——选择排序

    Java排序算法--选择排序(Selection sort) 传送门 冒泡排序 插入排序 简述 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找 ...

  3. 排序算法--选择排序(Java实现)

    选择排序概念 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中 ...

  4. 排序算法---选择排序(java版)

    简单选择排序 原理 选择排序(Selection Sort)的原理有点类似插入排序,也分已排序区间和未排序区间.但是选择排序每次会从排序区间中找到最小的元素,将其放到已排序区间的末尾. 简单选择排序执 ...

  5. 数据结构/排序/选择排序/简单选择排序

    原理 介绍: 原理:每趟排序记录最小记录的索引后交换 类比:猴子搬苞谷,喜欢更大的苞谷.猴子经过1排苞谷,每经过1个苞谷就与心中的苞谷对比,更大就记录当前苞谷的位置,走完这一排苞谷,心中的那个苞谷就是 ...

  6. 排序算法(分类,时间复杂度)(快速排序,插入排序,希尔排序,选择排序,冒泡排序)

    1.排序算法 1.排序的分类 分为内部排序和外部排序,其中内部排序分为插入排序.选择排序.交换排序.归并排序和基数排序.插入排序包括直接插入排序和希尔排序:选择排序包括简单选择排序和堆排序:交换排序包 ...

  7. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  8. 排序算法——选择排序法(Select Sorting)

    选择排序(Select Sorting) 基本介绍 ​ 选择排序也属于内部排序法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 选择排序思想 ​ 选择排序(Selec ...

  9. 选择排序—简单选择排序(Simple Selection Sort)

    基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...

  10. C语言基础排序算法-选择排序

    C语言基础排序算法-选择排序 什么是选择排序? 选择排序(Selection sort)是一种简单直观的排序算法,第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从 ...

最新文章

  1. React Native 环境搭建步骤
  2. VCS-bilibili教程篇1-Simulation Basics
  3. java高级工程师开放面试题集一
  4. RHEL/Fedora/CentOs的系统服务优化
  5. C++新旧类型转换小记
  6. CSS绘制放大缩小关闭按钮
  7. ORACLE IMP-00017: following statement failed with ORACLE error 6550
  8. 前端学习(576):margin无效情形之内联特性导致无效
  9. php抽象类的构造函数,抽象类的构造函数
  10. 一个很好的开源图像处理软件--imageJ (2
  11. 20135231 —— Linux 基础入门学习
  12. vue 百度地图 3d地图
  13. esp8266_deauther第四篇
  14. Java程序实现繁体字转换简体字
  15. Android Q版本读取SDcard
  16. Android压缩图片和libjpeg库
  17. GO111MODULE作用
  18. python三级考什么_什么是计算机三级考试?计算机三级考什么?
  19. Pycharm Professional(专业版)完美破解,永久激活
  20. python格式化输出xml_将Scrapy的输出格式化为XML

热门文章

  1. Bluetooth以及音频协议 基础知识学习
  2. Linux网络的网络配置(超详细,百分百成功)
  3. jemalloc java_jemalloc源码结构分析
  4. php新手自学手册,PHP编程新手自学手册
  5. Netapp存储日常检查及信息收集
  6. coreldraw2019天气滤镜_CorelDRAW2019快捷键大全
  7. 【Mark】计算机科学导论
  8. 网络图片嗅探工具driftnet
  9. 11 个超火的前端必备在线工具,终于有时间上班摸鱼了
  10. SVN版本管理的回滚(SmartSVN)