一、选择排序
/** * 选择排序: * 选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小或最大的元素, * 存放到起始位置,然后,再从剩余未排序元素中找最小或最大的元素,放到已排序序列的末尾,直到全部完成。 */
public static void selectSort(Integer[] arr) {
//遍历所有的数
for (int i = 0; i < arr.length; i++) {
//记录最小值的下标
int minIdx = i;
//把当前记录最小值的数和后边所有数进行比较,并维护这个最小值的下标
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIdx]) {
//刷新最小值的下标
minIdx = j;
}
}
//如果最小值下标与初始值不同,那么交换这两个数据
if (i != minIdx) {
int temp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = temp;
}
}
}
算法要点:
1.遍历全部元素
2.一次遍历中动态维护最大值或最小值
3.最后比较初始值和最终值是否一样
二、全部代码
public class _5_SelectSort {
public static void main(String[] args) {
Integer[] arr = {3, 5, 1, 7, 2, 3, 4, 8};
selectSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void selectSort(Integer[] arr) {
//遍历所有的数
for (int i = 0; i < arr.length; i++) {
//记录最小值的下标
int minIdx = i;
//把当前记录最小值的数和后边所有数进行比较,并维护这个最小值的下标
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIdx]) {
//刷新最小值的下标
minIdx = j;
}
}
//如果最小值下标与初始值不同,那么交换这两个数据
if (i != minIdx) {
int temp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = temp;
}
}
}
}