思路
1、用基准值依次与其他数据比较,并记录最小数据对应的索引;
2、交换基准值与最小值的位置;
3、对剩下的元素重复以上两步。
图示
每次遍历拿黄色数据与蓝色区间比较,得到最小值;然后用最小值与黄色数据交换位置。
代码
算法
/**
* 选择排序
*
* @param data
*/
public static void selectOrder(int[] data) {
for (int i = 0; i < data.length - 1; i++) {
// 假设最小值索引为i,以data[i]为基准值
int minIndex = i;
for (int j = i + 1; j < data.length; j++) {
// 若找到更小的数据则记录对应的索引
if (data[minIndex] > data[j]) {
minIndex = j;
}
}
// 将基准值与最小值交换位置
exchange(data, minIndex, i);
}
}
private static void exchange(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
测试
public static void main(String[] args) {
int[] data = {5, 3, 4, 1, 2};
selectOrder(data);
System.out.println(Arrays.toString(data));
}
结果
[1, 2, 3, 4, 5]