算法描述
它的工作原理:首先在未排序序列中找到最小(大)元素,与排序至index的元素进行交换,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后再与排序至index的元素进行交换。以此类推,直到所有元素均排序完毕。
动画展示
代码实现
public class SelectionSort {
public static void main(String[] args) {
int[] arr = CommonStant.arr;
int length = arr.length;
for(int i = length - 1; i>0; i--){
int max = Integer.MIN_VALUE;
int index = 0;
for (int j = 0; j <= i; j++) {
if (arr[j] > max){
max = arr[j];
index = j;
}
}
//swap
int temp = arr[i];
arr[i] = max;
arr[index] = temp;
}
Arrays.stream(arr).forEach(System.out::println);
}
}
总结
稳定性:算法不稳定,冒泡排序在排序前后两个相等的数相对位置发生改变。
时间复杂度:O(n^2),最好和最坏都是O(n^2)
空间复杂度:O(1),不需要额外的变量进行存储。