分析:选择排序算法(不稳定)
每一轮从待排序的元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的后边(看实例)。
文字解析:如第一轮:标记第一个数(15)为最小,然后一个一个的比较,2比15小,就暂时标记2为最小,在往后和2一个一个的比较,入过有比2小的,就暂时标记那个数为最下,再继续比较,入过后边的数没有比2小的了,则2和15交换位置(常用方法:加法,借助第三变量,移位等)。
如第二轮:因为数列中2最小,放在最前边了,所以2就不在比较了,即标记剩下的待排序的第一个为最小,在重复第一步(看第二轮的结果加深理解)。
剩下的就是重复第一轮第二轮了。
以实例加深理解:
给定数组:15 2 45 32 56 89 4 15 55 6
第 一 轮:2 15 45 32 56 89 4 15 55 6 比较 9 次
第 二 轮:2 4 45 32 56 89 15 15 55 6 比较 8 次
第 三 轮:2 4 6 32 56 89 15 15 55 45 比较 7 次
第 四 轮:2 4 6 15 56 89 32 15 55 45 比较 6 次
第 五 轮:2 4 6 15 15 89 32 56 55 45 比较 5 次
第 六 轮:2 4 6 15 15 32 89 56 55 45 比较 4 次
第 七 轮:2 4 6 15 15 32 45 56 55 89 比较 3 次
第 八 轮:2 4 6 15 15 32 45 55 56 89 比较 2 次
第 九 轮:2 4 6 15 15 32 45 55 56 89 比较 1 次
源代码:
public class shuzu7 {
public static void main(String[] args) {
int[] nums = {15,2,45,32,56,89,4,15,55,6};
int minIndex = 0;//用于记录每次比较的最小值下标。
//控制轮数
for (int i = 0; i < nums.length-1; i++) {
minIndex = i;//每轮假设一个最小值下标(每轮的第一个)
//控制比较次数,因为最后一个都需要比较一次,所以是nums.length,不-1
for (int j = i+1; j < nums.length; j++) {
//如果标记的数比比较的数大,则换标记数的下标,在进行比较
if(nums[minIndex]>nums[j]){
minIndex = j;
}
}
//判断需要交换的下标是否是自己(i)
if(minIndex!=i){
nums[minIndex] = nums[minIndex] + nums[i];
nums[i] = nums[minIndex] - nums[i];
nums[minIndex] = nums[minIndex] - nums[i];
}
}
//输出结果
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
}
}