思路分析
选择排序,每次从待排序的元素序列中选择最大或者最小的元素,放到序列起始位置,再从剩余的元素中继续寻找,放到已排序序列的末尾
代码实现
package DataStructures;
/* 选择排序,每次从待排序的元素序列中选择最大或者最小元素
放到序列起始位置,再从剩余元素中继续寻找,放到已排序序列的末尾
*/
public class Selection {
public static int[] selectionSort(int[] arr) {
// 如果数组为空或者只有一个直接返回
if (arr == null || arr.length < 2) {
return arr;
}
// 从第一个元素开始选择最小元素
for (int i = 0; i < arr.length - 1; i++) {
// 目前最小索引
int minIndex = i;
// 剩余元素
for (int j = i + 1; j < arr.length; j++) {
// 如果比minIndex小则交换
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
// 放到排好队的末尾
swap(arr, i, minIndex);
}
return arr;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
测试代码
package DataStructuresTest;
import DataStructures.Selection;
import java.util.Arrays;
public class SelectionTest {
public static void main(String[] args) {
int[] arr = {1,5,2,9,8,3};
int[] result = Selection.selectionSort(arr);
for (int i: result) {
System.out.println(i);
}
}
}