选择排序
2018-11-03 11:08
169 查看
文章目录
选择排序(SELECTION SORT)
原理
初始时在序列中找到最小元素,放在序列的起始位置作为已排序序列;然后,再从剩余未排序的元素中继续寻找最小元素,放到已排序序列的末尾,依此类推,直至所有元素排序完毕。
注意选择排序和冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法元素的位置,从而将当前最小元素放到合适的位置;而选择排序每遍历依次都记住了当前最小元素的位置,最后仅需要一次交换操作即可将其放到合适的位置。
动态效果示意图
思路
给定数组 a
第一趟排序,在待排序的 n 个元素中选出最小的那个,将它与 a[1] 交换;
第二趟排序,在待排序数据 a[2] ~ a
中选出最小的数据,将它与 a[2] 交换;
第三趟排序,…
依次类推
第 n - 1 趟排序,在待排序的 a[n-1] ~ a
中选出最小的数据,将它与 a[n-1] 交换;
排序完成。
- 举例说明
5,2,8,4,9,1
============================================================================================
第一趟排序:原始数据: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 最小
9 和 8 交换
排序结果:1,2,4,5,8,9
============================================================================================
每一趟获得最小数的方法;使用 for 循环进行比较,定义一个变量 temp,首先前两个数进行比较,把较小的数放在 temp 中,然后用 temp 再去跟剩下的数据比较,如果出现比 temp 小的数据,就用它来替代 temp 中原有的数据。
//选择排序算法 public static void selectionSort(int[] arr){ for (int i = 0; i < arr.length-1; i++) { //控制循环的趟数 int k = i; //用k来记录最小数的位置 for (int j = i+1; j < arr.length; j++) { //利用循环找到未排序序列中最小的那个数 if(arr[j] < arr[k]) k = j; } //内层循环结束,找到本次循环的最小数,进行交换 if(i != k){ int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } }
选择排序算法改进
选择排序的思想是在要排序的一组数中,选出最小的那个数,然后与第一位置的数进行交换;然后再剩下的数中,找出最小的那个数与第二个数进行交换,直到第 n-1 个数与第 n 个数比较为止。而二元选择排序,顾名思义,从待排序的数组中找出一个最大值和一个最小值,分别与第一个数、最后一个数进行交换,这样可以使选择排序的时间复杂度降低,所以外层循环从 n 次变为了 n/2 次。
阅读更多相关文章推荐
- 冒泡排序,选择排序,插入排序的区别
- python算法实践5-直接选择排序
- 利用c++模板实现选择排序
- #算法排序(Java版)#冒泡排序、选择排序
- PHP排序算法系列:直接选择排序
- 直接选择排序
- 排序-选择排序(直接选择排序)
- 黑马程序员——c语言基础:冒泡排序、选择排序和折半查找
- 学习笔记:二分法排序,选择排序,冒泡排序,以及递归算法.
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
- 直接选择排序
- 选择排序
- 泛型编程Selection Sort 选择排序
- 选择排序
- 第十六周--项目3算法验证选择排序
- (一)冒泡排序、选择排序、插入排序
- Java中快速排序,冒泡排序和选择排序的实现
- 排序(选择、希尔、二分插入)
- 图示经典算法--选择排序
- 直接选择排序到堆排序做的那些改进