直接选择排序(Straight Select Sorting)的基本思想:

和直接插入排序一样,直接选择排序的思想在日常生活中也很常见。比如需要将学生按身高进行排队,最直接和简单的做法就是将每个同学都比较一下,选出最矮的那一个,排在队伍的最前面,再从剩下的队伍中选出最矮的那一个,直到排序完毕。直接选择排序就是利用了这种思想。

直接选择排序也将待排数组分为有序区和无序区,和直接插入排序不同的是初始状态下,有序区为空,无序区为整个数组的元素。直接选择排序从无序区选择最小元素的过程使用的是最简单和基本的顺序查找,需要从前往后将整个无序区的元素都比较一次,堆排序的优化思路就在于此。从无序区中找到最小元素后将最小元素与无序区的第一个元素交换位置,并将此元素纳入有序区内,这有可能导致数组不稳定,即排序前相同元素之间的次序与排序后相同元素之间的次序发生改变。比如{5,5,4,32},第一次选择的过程中,需要将第一个5和4互换位置,排序完成后,第一个5和第二个5之间的次序发生改变。

代码实现

//直接选择排序public static void straightSelectSort(int[] a){//排序的数组不能为空且至少要有两个元素if(a == null || a.length < 2){return;}int i,j,minIndex,temp;//i从0开始,(-1,i)是有序区,[i,a.length]是无序区,每次从无序区选择一个最小的元素与无序区的第一个元素交换。for (i = 0; i < a.length; i++) {minIndex = i;   //假设无序区的第一个元素就是无序区的暂时最小元素/*将暂时最小元素分别于无序区其它的元素进行比较,若其它元素比暂时最小元素还要小,那么它就是新的暂时最小元素。若与整个无序区的元素都比较了一次,得到的暂时最小元素就是最终最小元素。*/for(j = i + 1; j < a.length; j++){if(a[j] < a[minIndex]){minIndex = j;}}/*将最终最小元素和无序的第一个元素交换。若第一个元素就是最终最小元素,则可以不需要进行交换。当数组基本有序时,可以减少交换次数,效率较高。当数组顺序很混乱时,则需要多进行一次判断操作。总的而言,没什么太大的影响。*/if(i != minIndex){temp = a[i];a[i] = a[minIndex];a[minIndex] = temp;}}}

排序——直接选择排序相关推荐

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

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

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

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

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

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

  4. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  5. 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)

    *排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...

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

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

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

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

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

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

  9. C语言实现选择排序——简单选择排序算法

    C语言实现简单选择排序 文章目录 C语言实现简单选择排序 简单选择排序算法 1.交换操作 2.简单选择排序算法实现 项目完整代码 运行效果图 简单选择排序算法 1.交换操作 //交换实现 void s ...

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

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

最新文章

  1. python搜题程序_智慧树Python程序设计基础搜题公众号
  2. Cognos配置oracle类型内容库时报错
  3. Data Lake Analytics的Geospatial分析函数
  4. What is WCF
  5. Spring事务控制和传递性理解
  6. 207 台服务器被种植木马,谁害死了“旧”乐视?
  7. 【DP + 卖股票】LeetCode 714. Best Time to Buy and Sell Stock with Transaction Fee
  8. 段错误原理:Segmentation fault: 11
  9. 修改Maven默认编译级别
  10. 2019版PHP自动发卡平台源码
  11. 如何在计算机设置鼠标宏,游戏鼠标宏设置是什么?怎么设置游戏鼠标宏?
  12. 卸载驱动、安装CUDA及CUDNN
  13. QQ影音播放器 for Mac
  14. 材料科学基础考研计算机,2017年西安工业大学计算机学院805材料科学基础考研仿真模拟题...
  15. 我要吐槽各大自媒体平台的权重问题
  16. 原生js时间格式化方法封装
  17. 很牛的求职经历(转)
  18. postgis常用的函数
  19. 《Python编程从入门到实践》学习笔记7:用户输入和while循环
  20. Linux安装卸载java

热门文章

  1. linux上安装安卓厨房手机版,【图片】【教程】进阶教程之“使用安卓厨房制作/修改ROM包”【联想a798t吧】_百度贴吧...
  2. Three.js学习笔记①---搭建本地three.js官网(来自B站老陈视频)
  3. Weblogic 部署问题及解决方法
  4. 专家视点:杜绝木马的干扰-防范后门的技巧(转)
  5. HTML5期末大作业:我的家乡网站设计——我的家乡
  6. Google Play 应用迁移
  7. 在qq2003里实现qq2000的皮肤
  8. Linux下设备驱动
  9. 本世纪最经典好文---新系统下经典老游戏[中文HGAME]重玩全攻略(感谢作者)
  10. cmd命令查看服务器硬盘序列号,硬盘序列号查询命令_Win7系统中怎么通过CMD查看硬盘序列号...