Java经典算法之选择排序(Select Sort)
思路:就是把所有数据项扫描一遍,挑出最小的那个和最左边的交换位置,即放到0位置。现在最左边的就是有序得了,不需要在交换位置,再次扫描数据时就是从1开始,还是寻找最小的和1交换位置,直到所有数据都是有序的。选择排序的比较次数与冒泡排序相同,都是N-1次(https://www.cnblogs.com/zouwangblog/p/10984663.html),但是交换次数少于冒泡排序,每趟排序只有最后一次交换,前面的比较都是下标赋值
下面举例说明:
int[] arg = {6,3,8,2,9,1}
int min = 0
第一趟排序:
第一次3和6比较,3小于6,min = 1
第二次从min=1开始比较:8和3比较,8大于3,继续不赋值
第三次2和3比较,2小于3,min = 3
第四次从min = 3开始比较,9大于2,继续不赋值
第五次1和2比较,1小于2,min = 5
将下标0和下标5进行交换
第一趟总共进行了 5次比较 1次交换, 排序结果: 1,3,8,2,9,6
第二趟排序(从3开始向后比较):
第一次3和8比较,8大于3,继续不赋值
第二次2和3比较,2小于3,min = 3
第三次从min = 3开始比较,9 大于2,继续不赋值
第四次从min = 3开始比较,6大于2,不赋值,循环结束
将下标1和下标3进行交换
第二趟总共进行了4次比较 1次交换, 排序结果: 1,2,8,3,9,6
第三趟排序(从8开始向后比较):
第一次3和8比较,3小于8,min = 3
第二次从min = 3开始比较,9大于3,继续不赋值
第三次从min = 3开始比较,6大于4,继续不赋值结束循环
将下标2和下标3进行交换,
第二趟总共进行了3次比较 1次交换, 排序结果: 1,2,3,8,9,6
第四趟排序(从8开始向后比较):
第一次8和9比较,9大于8,继续不赋值
第二次8和6比较,6小于8,min = 5结束循环
将下标3和下标5进行交换
第二趟总共进行了2次比较 1次交换, 排序结果: 1,2,3,6,8,9
第五趟排序(从8开始向后比较):
第一次8和9比较,9大于8,不赋值结束循环
第二趟总共进行了1次比较 0次交换, 排序结果: 1,2,3,6,8,9
代码实现:
外层循环用变量out,从数组开头开始(数组下标为0)向高位增长。内层循环用循环变量in,从out所指位置开始,同样是向右移位,在每一个in的新位置数据项array[in]和array[min]进行比较,如果a[in]更小,则min被赋值为in的值,在内层循环的最后,min被指向最小的值,然后交换out和min指向的数组数据项
public static void selectSort(int[] array) {
int out,in,min = 0;
for (out = 0; out<array.length-1; out++) {
min = out;
for (in = out; in<array.length; in++) {
if (array[in] < array[min]) {
min = in;
}
}
swap(out, min);
}
}
public static void swap(int one, int two) {
int temp = ii[one];
ii[one] = ii[two];
ii[two] = temp;
}
不变性:下标小于或等于out位置的数据总是有序的
Java经典算法之选择排序(Select Sort)的更多相关文章
- Java中的经典算法之选择排序(SelectionSort)
Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...
- java基础算法之选择排序
选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. ...
- 【排序算法】选择排序(Selection sort)
0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...
- Java实现算法之--选择排序
选择排序也是比較简单的一种排序方法,原理也比較easy理解,它与冒泡排序的比較次数同样,但选择排序的交换次数少于冒泡排序.冒泡排序是在每次比較之后,若比較的两个元素顺序与待排序顺序相反,则要进行交换, ...
- Java经典算法之插入排序(Insert Sort)
插入排序在局部有序的情况下比冒泡排序快一倍,比选择排序快一点. 那什么是插入排序,就是将局部有序的数据向右移动,将未排序的数据插到他的前面 下面我们来解析代码: 这里外层循环out变量从1开始向右移动 ...
- 基础算法之选择排序Selection Sort
原理 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕.一种简单直观的排序算 ...
- Java经典算法之冒泡排序(Bubble Sort)
原理:比较相邻的两个值,将值大的元素交换至右端 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数 ...
- 排序算法 - 选择排序(selection sort)
选择排序(Selection sort)跟插入排序一样,也是O(n^2)的复杂度,这个排序方式也可以用我们的扑克牌来解释. 概念 桌面上有一堆牌,也是杂乱无章的,现在我们想将牌由小到大排序,如果使用选 ...
- 【DS】排序算法之选择排序(Selection Sort)
一.算法思想 选择排序是一种简单直观的排序算法.它的工作原理如下: 1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列: 2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾 ...
随机推荐
- Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.
在连接数据库时,使用了最新版本的mysql-Connector,所以导致老版本的“com.mysql.jdbc.Drive”不可行,要改为“com.mysql.cj.jdbc.Driver”
- power coefficient calculation -- post processing
input: unscaled moment of one bladeoutput: power coefficient of a 3-blades wind/tidal turbine matlab ...
- display math in cnblog
$a=b+c$ this is a example \(a=\frac{b}{c}\)
- 【模板】Lca倍增法
Codevs 1036 商务旅行 #include<cstdio> #include<cmath> #include<algorithm> using namesp ...
- 51NOD 1287 加农炮(不水的线段树)
>>点击进入原题测试<< Input示例 Output示例 思路:刚开始以为结点存最大值就行了,然后大于左子树的最大值就能进入右子树:然后发现样例都过不了:后面发现,并不是这个 ...
- [bzoj3191][JLOI2013][卡牌游戏] (概率dp)
Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字 ...
- iframe 与frameset
frameset 元素可定义一个框架集.它被用来组织多个窗口(框架).每个框架存有独立的文档.在其最简单的应用中,frameset 元素仅仅会规定在框架集中存在多少列或多少行.您必须使用 cols 或 ...
- POJ 2142 TheBalance 模线性方程求解
题目大意: 就是将两种砝码左右摆放,能够在物品放置在天平上时保持平衡 很容易得到 ax + by = t的模线性方程 按题目要求,希望首先满足 |x| + |y| 最小 , 如果有多种情况,再满足所有 ...
- jQuery动态添加表格1
用jquery的append方法在指定行的后面新增一行tr,会把新增的行的html追加到指定行的html里面 content +="<tr><td>123</t ...
- P - FatMouse and Cheese 记忆化搜索
FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension ...