选择排序(Java)
原理:
每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排 序的数据元素排完 。性能分析:
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:不稳定
例:
int[] a = { 9, 2, 5a, 7, 4, 3, 6, 5b };
// 交换中该情况无法识别,保证 5a 还在 5b 前边
实现:
public static void selectSort(int[] arr){
//创建一个变量 bound 表示已排序区间的边界
//[0,bound)已排序区间
//[bound, length)未排序区间
int bound = 0;
for(; bound < arr.length; bound++){
//里层循环要进行打擂台的过程
//擂台的位置就是 bound 下标的位置
for(int cur = bound + 1; cur < arr.length; cur++){
if(arr[cur] < arr[bound]){
swap(arr,cur,bound);
}
}
}
}
public static void swap(int[] arr ,int x,int y){
int tmp = arr[x];
arr[x] = arr[y];
arr[y] = tmp;
}
验证main函数:
public static void main(String[] args) {
int[] arr = {2,4,6,3,5,8};
selectSort(arr);
System.out.println(Arrays.toString(arr));
}