基本原理:
将待排序的元素分为已排序(初始为空)和未排序两组,依次将未排序的元素中值最小的元素放入已排序的组中。
直接选择排序的基本过程为:
package com.llhl.javase.java.array;
public class XuanZe {
public static void main(String[] args) {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 50);
}
for (int t : arr) {
System.out.println(t + " ");
}
System.out.println("***************************");
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
int tmp = 0;
for (int j = i+1; j < arr.length ; j++) {
if (arr[j] < arr[minIndex]) {
tmp = arr[j];
arr[j] = arr[minIndex];
arr[minIndex] = tmp;
}
}
}
for (int i : arr) {
System.out.print(i + " ");
}
}
}
public class XuanZe {
public static void main(String[] args) {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 50);
}
for (int t : arr) {
System.out.println(t + " ");
}
System.out.println("***************************");
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
int tmp = 0;
for (int j = i+1; j < arr.length ; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
for (int i : arr) {
System.out.print(i + " ");
}
}
}
直接选择排序效率分析
算法的时间效率:无论初始状态如何,在第i趟排序中选择最小关键码的元素,需做n-i次比较,因此总的比较次数为:O(n^2)
算法的空间效率:空间效率很高,只需要一个附加程序单元用于交换,其空间效率为O(1)
算法的稳定性:不稳定