基本介绍
选择排序也是一种简单的排序算法。
基本思想:
第一次遍历数组中找出最小的元素,然后放到首位,也就是和arr[0]交换位置,第二次遍历从arr[1]~arr[length-1]中找出最小的值,然后和arr[1],交换位置,依次类推。。。
排序过程详解
原始数组:4, 2, 1, 5, 3
第一轮遍历 arr[0]~arr[leagth-1]
1,2,4,5,3 第一轮1最小,4 和 1 交换位置
第二轮遍历 arr[1]~arr[leagth-1]
1,2,4,5,3 第二轮2最小,没有发生交换位置
第三轮遍历 arr[2]~arr[leagth-1]
1,2,3,5,4 第三轮3最小,4 和 3 交换位置
第四轮遍历 arr[3]~arr[leagth-1]
1,2,3,4,5 第四轮4最小,5 和 4 交换位置
完成排序!!!
小结
- 一共需要length-1轮排序
- 每轮排序的比较范围在缩小arr[i+1]~arr[leagth-1]
- 最小arr[min]和arr[i]交换
代码
public static void sort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
int min = i;//默认i下标的元素的数值最小
boolean haveSmaller = false; //是否存在更小的值
//查找比默认元素数值更小的元素如果有就替换 查找范围arr[i+1]~arr[length-1]
for (int j = i+1; j < arr.length; j++) {
if(arr[min]>arr[j]) {
min = j;
haveSmaller = true;
}
}
if(haveSmaller) {
//交换位置
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
System.out.println(Arrays.toString(arr));
}
}