简单选择排序
1.基本思路:
(1).第一轮假定第一个数字是最大或者最小值,让它和后面的数字逐一比较,由此确定出最大值和最小值,并让其归为数组的第一位,(也就是和假定值交换位置)。
(2).第二轮就要从下一个数字开始 以此类推
2.选择排序实现过程演示:
下面以数列{20,40,30,10,60,50}为例,演示它的选择排序过程(如下图)。
排序流程第1趟: i=0。找出a[1…5]中的最小值a[3]=10,然后将a[0]和a[3]互换。 数列变化: 20,40,30,10,60,50 – > 10,40,30,20,60,50
第2趟: i=1。找出a[2…5]中的最小值a[3]=20,然后将a[1]和a[3]互换。
数列变化: 10,40,30,20,60,50 – > 10,20,30,40,60,50
第3趟: i=2。找出a[3…5]中的最小值,由于该最小值大于a[2],该趟不做任何处理。
第4趟: i=3。找出a[4…5]中的最小值,由于该最小值大于a[3],该趟不做任何处理
。第5趟: i=4。交换a[4]和a[5]的数据。 数列变化: 10,20,30,40,60,50 – > 10,20,30,40,50,60
代码实现:
public class selectSort {
public static void main(String[] args) {
/*简单选择排序: 1.第一轮从一个数字对后面数字逐一比较 结束之后 最小或最大的数据已经确定
2.第二轮就要从下一个数字开始 以此类推
3.外循环依旧确定轮数 执行n-1次
*/
int[] str = {5, 1, 3, 2, 4};
//外循环
for (int i = 0; i < str.length - 1; i++) {
//内循环 第一轮从0索引对后面数字逐一比较结束之后 最小的数据已经确定 第二轮就要从下一个索引开始
//+i是因为下一轮要从下一个数字开始比较了
for (int j = i+1; j < str.length; j++) {
if (str[i] < str[j]) { //i一直和它后面的j比较 i受下一轮控制 而j是比较一次往后走一次
int temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
PrintStr(str);
}
private static void PrintStr(int[] str) {
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]+" ");
}
}
}