选择排序--Selection sort
原理
选择排序,是冒泡排序的优化。
每一趟只交换一次。就是选择最大(或者最小的)和首位交换。
例子
现有无序数组[6 5 4 1 8 9]
第一趟找到最小数1,放到最前边(与首位数字交换)
交换前:| 6 | 5 | 4 | 1 | 8 | 9 |
交换后:| 1 | 5 | 4 | 6 | 8 | 9 |
第二趟找到余下数字[5 4 6 8 9]里的最小数4,与当前剩余数组的首位数字进行交换
交换前:| 1 | 5 | 4 | 6 | 8 | 9 |
交换后:| 1 | 4 | 5 | 6 | 8 | 9 |
第三趟继续找到剩余[5 6 8 9]数字里的最小数5,实际没有交换,5在首位置无须交换
第四趟从剩余的[6 8 9]里找到最小数6,实际没有交换
第五趟从剩余的[8 9]里找到最小数8,发现它在正确的位置,没有交换
排序完毕输出正确结果| 1 | 4 | 5 | 6 | 8 | 9 |
第一趟找到最小数1的细节
当前数组是| 6 | 5 | 4 | 1 | 8 | 9 |
先把6取出来,让它扮演最小数
当前最小数6与其它数一一进行比较,发现更小数就交换角色
当前最小数6与5比较,发现更小数,交换角色,此时最小数是5,接下来5与剩余数字比较
当前最小数5与4比较,发现更小数,交换角色,此时最小数是4,接下来4与剩余数字比较
当前最小数4与1比较,发现更小数,交换角色,此时最小数是1,接下来1与剩余数字比较
当前最小数1与8比较,不动
当前最小数1与9比较,不动,到达末尾
当前最小数1与当前首位数字进行位置交换,如下所示
交换前:| 6 | 5 | 4 | 1 | 8 | 9 |
交换后:| 1 | 5 | 4 | 6 | 8 | 9 |
完成一趟排序,其余步骤类似
参考代码
/*** @Description:简单选择排序算法的实现*/ public class SelectSort {// -------------------------------------------------------// 第一趟排序: 原始数据:5 2 8 4 9 1// 最小数据1,把1放在首位,也就是1和5互换位置,// 排序结果:1 2 8 4 9 5// -------------------------------------------------------// 第二趟排序:// 第1以外的数据{2 8 4 9 5}进行比较,2最小,// 排序结果:1 2 8 4 9 5// -------------------------------------------------------// 第三趟排序:// 除1、2以外的数据{8 4 9 5}进行比较,4最小,8和4交换// 排序结果:1 2 4 8 9 5// -------------------------------------------------------// 第四趟排序:// 除第1、2、4以外的其他数据{8 9 5}进行比较,5最小,8和5交换// 排序结果:1 2 4 5 9 8// -------------------------------------------------------// 第五趟排序:// 除第1、2、4、5以外的其他数据{9 8}进行比较,8最小,8和9交换// 排序结果:1 2 4 5 8 9// ------------------------------------------------------public static void selectSort(int[] arr) {if (arr == null || arr.length == 0)return;int minIndex = 0;// 选择排序,是冒泡排序的优化for (int i = 0; i < arr.length; i++) {// 只需要比较n-1次System.out.println("i======" + i);minIndex = i;for (int j = i + 1; j < arr.length; j++) {// 从i+1开始比较,因为minIndex默认为i了,i就没必要比了。System.out.println("j======" + j);if (arr[j] < arr[minIndex]) {minIndex = j;}}if (minIndex != i) { // 如果minIndex不为i,说明找到了更小的值,交换之。 swap(arr, i, minIndex);}}System.out.println("结果为==========================");for (int i : arr) {System.out.println(i);}}public static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void main(String[] args) {int[] arr = { 8, 10, 2, 1, 5, 4 };new SelectSort().selectSort(arr);}}
转载于:https://www.cnblogs.com/llq1214/p/9717661.html
选择排序--Selection sort相关推荐
- C语言选择排序Selection sort算法(附完整源码)
选择排序Selection sort算法 选择排序Selection sort算法的完整源码(定义,实现,main函数测试) 选择排序Selection sort算法的完整源码(定义,实现,main函 ...
- 【排序算法】选择排序(Selection sort)
选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...
- 排序之选择排序(Selection sort)
文章目录 1 基本思想 2 图示 3 代码 4 测试结果 5 时间复杂度及稳定性 以前了解过的排序算法,发现长时间不用之后,有些遗忘,特此记录一下,待遗忘时候可以再查阅一下 1 基本思想 N个数据,每 ...
- 内部排序 (四):选择排序 Selection Sorting (简单选择排序、堆排序)
作为数据结构的课程笔记,以便查阅.如有出错的地方,还请多多指正! 目录 简单选择排序 Simple Selection Sort 排序过程 算法实现 算法评价 T(n) S(n) 是否稳定 堆排序 H ...
- 基本排序算法01----选择排序(selection sort)
可能最简单的排序策略就是: 1.搜索整个列表,找到最小项的位置 2.如果该位置不是列表的第一项,则将两项交换位置 3.然后算法回到第二个位置并重复上述操作 4.当算法到达列表最后一个位置的时候,排序就 ...
- [转载] python选择排序二元选择_选择排序:简单选择排序(Simple Selection Sort)
参考链接: Python中选择排序Selection Sort 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的 ...
- 排序算法---选择排序(java版)
简单选择排序 原理 选择排序(Selection Sort)的原理有点类似插入排序,也分已排序区间和未排序区间.但是选择排序每次会从排序区间中找到最小的元素,将其放到已排序区间的末尾. 简单选择排序执 ...
- python八大选择排序_Python实现选择排序
选择排序: 选择排序(Selection sort)是一种简单直观的 排序算法 .它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...
- python实现选择排序
python实现选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余 ...
最新文章
- mac apache 和 nginx ssl 配置自签名的SSL
- mysql:mysql error:Access denied for user 'root'@'localhost' (using password: YES)
- CentOS 开机自启动脚本
- php开发支持的文件类型整理
- mysql group 条件,mysql - mysql group by,两个条件,限制1 - SO中文参考 - www.soinside.com...
- Activity的四种启动模式-图文并茂
- oracle临时表空间组,证明临时表空间组在并发session时的作用
- 升级步骤linux_开发人员福音,在win10系统上安装linux子系统
- .net core 常见设计模式-IChangeToken
- html textarea粘贴事件,javascript在textarea中捕获粘贴事件
- 扬州大学c语言上机作业答案,扬州大学C语言上机作业1-9整理
- 评国内三大B2C网站首页的信息架构
- 中国微流体系统市场趋势报告、技术动态创新及市场预测
- 请回答数据结构【二叉搜索树】
- 《重构:改善既有代码的设计》读书笔记(上)
- 遍历input。select option 选中的值
- Hbuilder x css样式编写无提醒
- 查看tomcat的版本号
- C语言中的signal函数
- 百度服务器保存信息多久,百度快照在百度服务器里保存多长时间???