选择排序
既然名为选择,那么排序过程一定不是全部进行排序,而是对选择出来的某项进行了排序
1.先将0~N进行遍历,找到最小数的索引,然后将其与0号位交换
2.再遍历1~N位置,找到次小数的索引,将其与1号位交换
3.遍历2~N位置,找到第三小的数的索引,将其与2号位交换,依次类推
图示
第一轮比较
先将0~4号位的所有数查一下,发现3号位置数最小,将3号位与0号位交换
最小值索引号 | 交换结果 |
---|---|
3 | 1 5 2 9 4 |
第二轮比较
最小值1已经到了0号位,接下来只看1~4号位,最小值在3号位
最小值索引号 | 交换结果 |
---|---|
2 | 1 2 5 9 4 |
第三轮比较
最小值索引号 | 交换结果 |
---|---|
4 | 1 2 4 9 5 |
第四轮比较
最小值索引号 | 交换结果 |
---|---|
4 | 1 2 4 5 9 |
最终结果
代码实现
public void sort (int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
//如果新索引上的数小于当前最小索引上的数,更新索引
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
//交换数据
swap(arr, i, minIndex);
}
}
时间复杂度
O(n^2)