选择排序(交换排序):
选择最小的,从前往后排,每一轮找出(除前面排好的)剩下元素中最小的值与当前值进行交换。
由于找的是最小的数,如果有两个相同的最小数,那么靠后数就会被交换到前面,所以显然选择排序是不稳定的
比较简单,看了前面的冒泡排序,链表也没必要了,直接上代码:
public static void selectSort(int[] nums) { for (int i = 0; i < nums.length - 1; i++) { int min = nums[i];//定义最小值 int index = i;//记录最小值的索引位置 //下面就是寻找i+1到length中最小的值 for (int j = i + 1; j < nums.length; j++) { if (nums[j] < min) {//寻找最小的数 min = nums[j]; index = j;//最小值的索引 } } if (index != i) {//如果当前值不是最小值,那么就将它与最小值交换 nums[index] = nums[i]; nums[i] = min; } } }
测试:
8万随机数(0—1000万)排序时间:
after-before=4700ms
时间复杂度为:均为O(n2) 空间复杂度:O(1) 该算法不稳定