目录
1、选择排序的原理
- 每次循环将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素,则交换这两个元素
- 循环第一条规则,找出最小值,放到第一位
- 进行n-1轮比较,完成排序
简单而言,每轮都找到最小的放到前面。举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
数组: array={8 , 2 , 3 , 7 , 1}
第1轮: array={1 | 8 , 3 , 7 , 2}
第2轮: array={1 , 2 | 8 , 7 , 3}
第3轮: array={1 , 2 , 3 | 8 , 7}
第4轮: array={1 , 2 , 3 , 7 | 8}
2、过程分析
- i 代表第一个数据的位置
- j 代表后边每一个元素的位置
array | i | j | array[i] | array[j] | array[i]>array[j] | [i]交换[j] |
第1轮 | ||||||
{8|2,3,7,1} | [0] | [1] | 8 | 2 | TRUE | 8<->2 |
{2|8,3,7,1} | [0] | [2] | 2 | 3 | FALSE | -- |
{2|8,3,7,1} | [0] | [3] | 2 | 7 | FALSE | -- |
{2|8,3,7,1} | [0] | [4] | 2 | 1 | TRUE | 2<->1 |
{1,8|3,7,2} | ||||||
第2轮 | ||||||
{1,8|3,7,2} | [1] | [2] | 8 | 3 | TRUE | 8<->3 |
{1,3|8,7,2} | [1] | [3] | 3 | 7 | FALSE | -- |
{1,3|8,7,2} | [1] | [4] | 3 | 2 | TRUE | 3<->2 |
{1,2,8|7,3} | ||||||
第3轮 | ||||||
{1,2,8|7,3} | [2] | [3] | 8 | 7 | TRUE | 8<->7 |
{1,2,7|8,3} | [2] | [4] | 7 | 3 | TRUE | 7<->3 |
{1,2,3,8|7} | ||||||
第4轮 | ||||||
{1,2,3,8|7} | [3] | [4] | 8 | 7 | TRUE | 8<->7 |
{1,2,3,7|8} | ||||||
结果 | ||||||
{1,2,3,7,8} |
- i 的取值范围是: 0 ~ < array.length - 1
- j 的取值范围是: i + 1 ~ < array.length
- 交换步骤如下:
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
3、参考代码
public static void main(String[] args) {
int[] array = {8 , 2 , 3 , 7 , 1};
System.out.println(Arrays.toString(selectedSort(array)));
}
private static int[] selectedSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] > array[j]) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
return array;
}
-----------输出结果-------------
[1, 2, 3, 7, 8]