一,选择排序算法思路:每趟选择序列的最小值/最大值,采取贪心选择策略。
二,选择排序算法有两种:1.直接选择排序 2.堆排序(基于二叉树)。
(这里讲解直接选择排序)
三,直接选择排序算法描述:每一趟从n(n>0)个元素的数据序列中选出关键字最小/最大的元素并放在最前/最后位置,下一趟再从剩下n-1个元素中选出最大/最小的元素并放在此前/后位置,依此类推,经过n-1趟完成排序。
关键字序列{7,4,5,9,8,2,1}的直接选择排序(升序)过程如下图所示:
下面使用代码实现:
public static void selectSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {int minindex = i;//假定最小值为iint min = arr[minindex];for (int j = i + 1; j < arr.length; j++) {//说明我们假定的最小值并不是最小值if (min > arr[j]) { min = arr[j];//重置最小值minminindex = j;//重置最小值下标minindex}}//将i位置上的元素值和最小索引位置的元素值交换if (minindex != i) {arr[minindex] = arr[i];arr[i] = min;}}System.out.println(Arrays.toString(arr));}
四,直接选择排序算法分析:直接选择排序的比较次数与数据序列的初始排列无关,第i趟排序的比较次数是n-i,移动次数与数据序列的初始排列有关,排序序列移动0次;反序排序的数据序列,每趟排序都要交换,移动3(n-1)次,算法的总比较次数为n^2/2次。
时间复杂度:O(n^2)
空间复杂度:O(1)。直接选择排序算法不稳定。
五,适用场景:数据量不大,并且对稳定性没有要求的情况。