我是一个从汽车行业转行IT的项目经理,我是Edward。最近一直在听马士兵马老师的算法课,第一个排序算法的作业就让我陷入了苦思冥想,选择排序固然简单,但是在一次遍历中加入了最大值的识别和换位增大了不少难度,临界情况的判定无疑是关键。为什么写这篇文章? 原因是查了不少帖子,发现虽然有不少人是用jJava实现的,但是写的都不对,写出来的程序跑了一遍1-10成立,就以为对了,真是贻害万年!
下面是实现的代码,其中关键判定处标有注释:
public class SelectionSortImproved {
public static void sort(int[]arr) {
for (int j = 0; j < arr.length/2; j++) {
//一次遍历同时找出最大值和最小值并换位
int minPos=j,maxPos=arr.length-1-j;
for (int i = j; i <= arr.length-j-1; i++) {
minPos = arr[minPos]>arr[i] ? i:minPos;
maxPos = arr[maxPos]<arr[i] ? i:maxPos;
}
// System.out.println("\n"+"minPos:"+minPos+","+"maxPos:"+