直接选择排序(StraightSelectSort)算法思想:
第一趟从n个元素的数据序列中选出关键字最小/大的元素并放到最前/后位置,下一趟再从n-1个元素中选出最小/大的元素并放到次前/后位置,以此类推,经过n-1趟完成排序。
代码实现如下:
package g;
public class StraightSelectSort {
public static int[] randomInt(int n, int size) {
int[] value = new int[n];
for (int i = 0; i < value.length; i++) {
value[i] = (int) (Math.random() * size);
}
return value;
}
public static void print(int[] value) {
for (int i : value) {
System.out.print(i + " ");
}
}
// 交换元素keys[i]与keys[j]元素,i、j范围由调用者控制
public static void swap(int[] keys, int i, int j) {
int temp = keys[i];
keys[i] = keys[j];
keys[j] = temp;
}
// 直接选择排序(升序)
public static void selectSort(int[] keys) {
// n-1趟排序
for (int i = 0; i < keys.length - 1; i++) {
int min = i;
// 每趟再从keys[i]开始的子序列中寻找最小元素
for (int j = i + 1; j < keys.length; j++) {
if (keys[j] < keys[min]) {
// min用来保存一趟中最小元素的下标
min = j;
}
}
if (min != i) {
swap(keys, i, min);
}
System.out.print("\n第" + (i + 1) + "趟 : ");
print(keys);
}
}
public static void main(String[] args) {
int[] values = StraightSelectSort.randomInt(10, 100);
System.out.print("关键字序列:");
StraightSelectSort.print(values);
StraightSelectSort.selectSort(values);
}
}
输出如下:
关键字序列:17 96 77 74 28 41 13 75 56 42
第1趟 : 13 96 77 74 28 41 17 75 56 42
第2趟 : 13 17 77 74 28 41 96 75 56 42
第3趟 : 13 17 28 74 77 41 96 75 56 42
第4趟 : 13 17 28 41 77 74 96 75 56 42
第5趟 : 13 17 28 41 42 74 96 75 56 77
第6趟 : 13 17 28 41 42 56 96 75 74 77
第7趟 : 13 17 28 41 42 56 74 75 96 77
第8趟 : 13 17 28 41 42 56 74 75 96 77
第9趟 : 13 17 28 41 42 56 74 75 77 96