原理:每一趟从待排序的元素里选出最小的元素,顺序放在已排好序列的最后,直到全部记录排序完毕;
基本思想:给定数组 int[] arrs = {2, 6, 3, 1, 5, 8, 7};第一趟排序,在待排序数据arrs[0]~arrs[6]中选出最小的元素与arrs[0]交换;
第二趟排序,在待排序数据arrs[1]~arrs[6]中选出最小的元素与arrs[1]交换;
以此类推,第i趟在待排序的数据arrs[i]~arr[n]中选出最小的元素与arrs[i]交换,直到全部排序完成。
举例数组 int[] arrs = {2, 6, 3, 1, 5, 8, 7}
----------------------------------------------------------------
第一趟排序: 原始数据:2 6 3 1 5 8 7
最小数据1,把1放在首位,也就是1和2互换位置,
排序结果:1 6 3 2 5 8 7
----------------------------------------------------------------
第二趟排序:
第1以外的数据{6 3 2 5 8 7}进行比较,2最小,2和6交换
排序结果:1 2 3 6 5 8 7
----------------------------------------------------------------
第三趟排序:
除1、2以外的数据{3 6 5 8 7}进行比较,3最小,不用交换
排序结果:1 2 3 6 5 8 7
----------------------------------------------------------------
第四趟排序:
除1、2、3以外的数据{ 6 5 8 7}进行比较,5最小,5和6交换
排序结果:1 2 3 5 6 8 7
----------------------------------------------------------------
第五趟排序:
除1、2、3、5以外的数据{ 6 8 7}进行比较,6最小
排序结果:1 2 3 5 6 8 7
----------------------------------------------------------------
第六趟排序:
除1、2、3、5、6以外的数据{8 7}进行比较,7最小,7和8交换
排序结果:1 2 3 5 6 7 8
for (int i = 0; i < arrs.length - 1; i++) {//第i趟排序
int k = i;
for (int j = k + 1; j < arrs.length; j++) {//选最小的元素
if (arrs[k] > arrs[j]) {
k = j;//目前找到的最小值的位置
}
}
//找到本次循环最小值,进行交换
if (i != k) {
int temp = arrs[i];
arrs[i] = arrs[k];
arrs[k] = temp;
}
}
继续阅读与本文标签相同的文章
-
一年一度的硬核科技盛会——杭州云栖大会就要来了! | 开发者必读(059期)
2026-05-18栏目: 教程
-
在QQ空间保存着的明明很清楚照片放时间长了为何会变模糊?
2026-05-18栏目: 教程
-
吹爆这五款APP,每一款手机必备,不知道蛮可惜的
2026-05-18栏目: 教程
-
报销内容大同小异,可以直接套用模板数据吗?
2026-05-18栏目: 教程
-
美国男性机器人诞生,满足用户“硬需”,96%的女性用户都满意
2026-05-18栏目: 教程
