本章是对选择排序的分析和实现过程
《Java数据结构与算法》中的例子
棒球队员按身高从矮到高站队
生活中与程序规则的对比可以参考冒泡排序一章
冒泡排序
不同的是选择排序相对与冒泡排序,会省去很多元素交换时带来的开销
- 棒球队员开始站队之前,规定存在一个记牌器用于记录最矮队员现阶段的站位
- 开始两两人员进行比较,以0号队员为记牌器起点号码,当后面出现比其矮的队员,则在记牌器上替换下号码,但并不做位置交换
- 继续比较时则按照记牌器中现阶段存在的号码为基点,继续比较,以此类推
- 队列从头到尾比较完一趟时,记牌器上现存号码则是最矮队员号码
- 这时进行队员位置交换,最矮队员被排在了队伍最前面,这位队员则成为已排序的不变量
- 下一轮比较则忽略他,以后一位位置上的队员为记牌器起点号码,重复上述操作,知道排序完成
代码实现过程
首先
老样子,先提供出数组的构造和生成随机值、打印元素的方法,为逐步分析做准备
/**
* @author: DonHear
* @since: 2021-01-29 16:36
* @Description:
* @version: 1.0.0
*/
public class SelectSort {
private final long[] a;
//指针(索引)体现数组a中实际元素个数
private int nElems;
//构造函数:当对象初始化后,指针(索引)也随之初始化
public SelectSort(int max){
a = new long[max];
nElems = 0;
}
public static void main(String[] args) {
//声明数组大小
SelectSort selectSort = new SelectSort(10);
//生成20个随机元素
selectSort.goRandom(10);
//打印数组元素
selectSort.display();
}
/**
* 元素交换
* @param one
* @param two
*/
private void swap(int one,int two){
long temp = a