Java基础-数组-排序-简单选择排序
Java基础-数组-排序-简单选择排序
排序目标:
将已知整数数组按从小到大的顺序进行排列;
// 排序前
{4, 2, 1, 3, 5};
// 排序后
{1, 2, 3, 4, 5};
实现思路:
在已知整数数组中,从下标为0的元素开始,依次与后面的元素进行对比;若当前元素的值大于所对比的元素的值,则交换两个元素的值;然后继续对比,一轮对比完成后可以将最小的值放在第一位;再从下标为1的元素继续对比,如此循环最终可将数组的元素按从小到大的顺序排列,实现数组排序;
示例代码:
/**
* description 简单选择排序
* @author Makavelli
* @date 2022/2/20 23:02
* @version 1.0.0
*/
public class SelectSort {
public static void selectSort(int[] num) {
System.out.println("开始排序");
int arrayLength = num.length;
for (int i = 0; i < arrayLength - 1; i++) {
for (int j = i + 1; j < arrayLength; j++) {
/**
* 交换 num[i] 和 num[j]
*/
if (num[i] - num[j] > 0) {
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
System.out.println("第"+j+"次比对后"+java.util.Arrays.toString(num));
}
System.out.println("第"+(i+1)+"轮排序"+java.util.Arrays.toString(num));
}
}
public static void main(String[] args) {
int[] num = {4, 2, 1, 3, 5};
System.out.println("排序之前:\n" + java.util.Arrays.toString(num));
selectSort(num);
System.out.println("排序之后:\n" + java.util.Arrays.toString(num));
}
}
程序输出日志:
排序之前:
[4, 2, 1, 3, 5]
开始排序
第1次比对后[2, 4, 1, 3, 5]
第2次比对后[1, 4, 2, 3, 5]
第3次比对后[1, 4, 2, 3, 5]
第4次比对后[1, 4, 2, 3, 5]
第1轮排序[1, 4, 2, 3, 5]
第2次比对后[1, 2, 4, 3, 5]
第3次比对后[1, 2, 4, 3, 5]
第4次比对后[1, 2, 4, 3, 5]
第2轮排序[1, 2, 4, 3, 5]
第3次比对后[1, 2, 3, 4, 5]
第4次比对后[1, 2, 3, 4, 5]
第3轮排序[1, 2, 3, 4, 5]
第4次比对后[1, 2, 3, 4, 5]
第4轮排序[1, 2, 3, 4, 5]
排序之后:
[1, 2, 3, 4, 5]
步骤说明
声明数组
int[] num = {4, 2, 1, 3, 5};
第 1 轮第 1 次比对;
i = 0 ,j = 1 num[i] = 4 ,num[j] = 2; 4 > 2
,故交换二者的值,交换后的数组为{2, 4, 1, 3, 5}
;第 1 轮第 2 次比对;
i = 0 ,j = 2 num[i] = 2 ,num[j] = 1; 2 > 1
,故交换二者的值,交换后的数组为{1, 4, 2, 3, 5}
;第 1 轮第 3 次比对;
i = 0 ,j = 3 num[i] = 1 ,num[j] = 3 1 < 3
,故不交换,此时数组为{1, 4, 2, 3, 5}
;第 1 轮第 4 次比对;
i = 0 ,j = 4 num[i] = 1 ,num[j] = 5 1 < 5
,故不交换,此时数组为{1, 4, 2, 3, 5}
;
综上,第一轮排序后的数组是:{1, 4, 2, 3, 5}
第一轮排序过程示意图如下:
重复如上步骤,最终排序后的数组是:[1, 2, 3, 4, 5]
感谢阅读,如果对您有帮助,很希望能收到您一个大大的赞!
关注了解更多!