选择排序之直接选择排序
直接选择排序思想:第一趟从n个元素的数据序列中选出最小/大的元素放到最前/后的位置,下一趟从n-1个元素中选出最小/大的元素并放到次前/后的位置,如此循环,经过n-1趟完成排序。
序列{38,97,26,19,38*,15}的直接选择排序过程如下图:
直接选择排序算法代码如下:
import java.util.Scanner;
public class SelectSort {
public static void selectSort(int[] keys) {
for (int i = 0; i < keys.length - 1; i++) {// 遍历n-1趟
int min = i;// 标记最小位置
for (int j = i + 1; j < keys.length; j++) {// 从i+1之后数列中查找更小的数
if (keys[j] < keys[min]) {
min = j;
}
}
if (min != i) {// 如果不同,则交换位置
keys[i] = keys[min] ^ keys[i];
keys[min] = keys[i] ^ keys[min];
keys[i] = keys[i] ^ keys[min];
}
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int[] n = new int[10];
for (int i = 0; i < n.length; i++) {
n[i] = s.nextInt();
}
selectSort(n);// 调用选择排序算法
for (int i = 0; i < n.length; i++) {
System.out.print(n[i] + " ");
}
}
}
直接选择排序时间复杂度O(n2),最好情况O(n2),最坏情况O(n2),空间复杂度O(1)
是不稳定排序。