排序算法----选择排序
选择排序的思想较为简单,就是每一趟遍历剩下的所有元素,找到其中最小的,然后交换使之排到当前的最前面位置(就是未排定元素中的第一个位置)。
选择排序是一种不稳定排序。
package young.unit01; public class T04_SelectionSort { // 比较次数:[n+(n-1)+(n-2)+...+2+1] = n^2 // 交换次数:|最少--数组本来就有序,0次交换 // |最多--数组本来逆序,交换次数等于比较次数 // 时间复杂度:O(N^2) // 稳定性:做不到稳定性;因为每次选取剩余所有的数中最小的数与当前最前面的数交换,很可能就破换稳定性 // 5 5 5 3 6 8 9 0 // 遍历第一遍 发现0最小 那么第一个5与0交换---此时5 5 5的相对顺序就破换了 // 之后遍历剩下两个5 他们都是剩余数中最小的,不用交换,指针直接下移。三个5的相对顺序在没有可能恢复成原来的样子 public static void selectionSort(int[] nums) { if (nums == null || nums.length < 2) { return; } for (int i = 0; i < nums.length; i++) { int min = i; for (int j = i + 1; j < nums.length; j++) { if (nums[min] > nums[j]) { min = j; } } swap(nums, i, min); } } private static void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
浙公网安备 33010602011771号