每一轮从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好的数列最后,直到全部待排序数据元素全部排完
PS:选择排序是一个不稳定的排序方法(相同的两个数可能会颠倒顺序)
31 11 25 53 76 34
将11(数组中的第一个元素作为最小值)
第一轮:11 31 25 53 76 34 (比较5次)
第二轮:11 25 31 53 76 34 (比较4次)
第三轮:11 25 31 53 76 34 (比较3次)
第四轮:11 25 31 34 76 53 (比较2次)
第五轮:11 25 31 34 53 76 (比较1次)
//选择排序算法 public class test2 { public static void main(String[] args) { // 声明一个乱序的数列(待排序) int[] num = {31,11, 25, 53, 76, 34}; // 用于记录每次比较的最小值的下标; int minIndex =0; // 外层循环控制轮数 for (int i=0;i<num.length-1;i++){ // 每一轮设定一个最小值小标; minIndex = i; for (int j=i+1;j<num.length;j++){ if (num[minIndex]>num[j]){ // 记录值更换 minIndex = j; } } // 判断需要交换的数下标是否是自己 if (minIndex!=i){ //此种交换方式可以不用声明中间变量,也可以选择中间变量方式进行数值的交换 num[minIndex] = num[minIndex]+num[i]; num[i] = num[minIndex]-num[i]; num[minIndex] = num[minIndex]-num[i]; } } // 选择排序后对数列进行打印输出 for (int n =0;n<num.length;n++){ System.out.print(num[n] +" "); } } }
PS:本博客宗旨用于学习,如有代码问题或其他问题可以留言 ,看到后第一时间会进行回复!!!!