选择排序(select sort)是一种简单直观的排序算法。
基本思想
每趟从待排序的记录中选出关键字最小(最大)的记录,顺序放在已排序的记录序列末尾,直到全部排序结束止。
算法分析
选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。
时间复杂度
选择排序的时间复杂度是
时间复杂度
O(1),只需要一个附加程序单元用于交换
注意:**
稳定性:选择排序是不稳定的排序算法,因为无法保证值相等的元素的相对位置不变,例如 [3, 4, 3, 1, 5]这个数组,第一次交换,第一个3和1交换位置,此时原来两个3的相对位置发生了变化。
public static void selectSort(int[] arr) {
if (arr == null || arr.length < 2) return;
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (i!=minIndex){
arr[i]=arr[i]^arr[minIndex];
arr[minIndex]=arr[i]^arr[minIndex];
arr[i]=arr[i]^arr[minIndex];
}
}
}