选择排序
public class SelectSort {
public static void main(String[] args) {
int[] arr = new int[10];
Random random = new Random();
for(int i = 0; i < 10; i++) {
arr[i] = random.nextInt(10);
}
Arrays.stream(arr).forEach(System.out::print);
selectSort(arr);
System.out.println("");
Arrays.stream(arr).forEach(System.out::print);
}
public static void selectSort(int[] arr) {
int length = arr.length;
int min;
int temp;
for(int i = 0; i < length - 1; i++) {
min = i;
for(int j = i + 1; j < length; j++) {
if(arr[j] < arr[min]) {
min = j;
}
}
if(min != i) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
}
性能分析
- 空间复杂度为O(1)。
- 不稳定的,如5,8,5,2,9这样一组数据,使用选择排序算法来排序的话,第一次找到最小元素2,与第一个5交换位置,那第一个5和中间的5顺序就变了,所以就不稳定了。
- 最好情况时间复杂度、最坏情况和平均情况时间复杂度都为O(n^2)。