public class SelectSorting {
public static void selectSort(int[] nums){
if (null == nums || nums.length < 2)
return;
for (int i = 0; i < nums.length; i++){
for (int j = i + 1 ; j < nums.length; j++){
if (nums[j] < nums[i]){ //寻找最小元素放在 i 位置处
int tmp = nums[j];
nums[j] = nums[i];
nums[i] = tmp;
}
}
}
}
//最好情况:数组已经有序,只做比较,不做交换,T(n)= n-1 + n-2 + ... + 1 = O(n^2)
//最坏情况:数组逆序,做全部比较与交换,T(n)= 2(n-1 + n-2 + ... + 1) = O(n^2)
//时间平均复杂度:O(n^2),空间复杂度:O(1)
//不稳定
//点评:选择排序思路是依次找最小元素,最后得到有序数组,其最好最坏情况都是O(^2)且不稳定且难以优化,所以这种排序最为“丑陋”,不过基于选择排序,可以得到一种更加有效的“堆排序”
public static void main(String[] args){
int[] nums = {2,0,1,9,1,0,2,8};
selectSort(nums);
for (int num: nums)
System.out.print(num+" ");
}
}