一、基本介绍
冒泡排序是从带排序的数据中,按照某一排序规则(从大到小或者从小到大)选出某一元素,在依规定交换位置达到排序的目的。
二、排序过程
对数组[100 , 20 , 80 , 8 ] 从小到大排序过程如下:
1. 第一趟排序
- 从数组 [100 , 20 , 80 , 8 ] 第一个位置起找到最小值 8,将其放到第一个位置,得到数组 [8 , 20 , 80 , 100 ]
2. 第二趟排序
- 从数组 [8 , 20 , 80 , 100 ] 第二个位置起找到最小值 20,将其放到第二个位置,得到排序后的数组 [8 , 20 , 80 , 100 ]
3. 第三趟排序
- 从数组 [8 , 20 , 80 , 100 ] 第三个位置起找到最小值 80,将其放到第三个位置,得到排序后的数组 [8 , 20 , 80 , 100 ]
这个时候数组变排好序了。可以看出,当数组中的元素个数为 m 时,需要进行 m-1 趟排序。在每一次排序时就是找出该位置的最小值然后放到该位置。
三、代码实现
public static void selectSort(int[] arr) {
if (arr == null || arr.length < 2) {//数组为空或者长度为1直接返回
return;
}
int min = 0;
int minIndex = 0;
for (int i = 0; i < arr.length - 1; i++) {//当遍历次数为数组长度-1时,数组排序完成
min = arr[i];//假设当前第一个值为最小值,临时变量存储最小值
minIndex = i;//临时变量存储最小值的索引
for (int j = i + 1; j < arr.length; j++) {//遍历从i+1个元素开始
if (min > arr[j]) {//当前min保存的不是最小值
min = arr[j];
minIndex = j;
}
}
if (minIndex != i) { //当前保存的值是最小值,不需要在进行赋值
arr[minIndex] = arr[i];
arr[i] = min;
}
}
}