本文共 1210 字,大约阅读时间需要 4 分钟。
算法思想
每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
步骤
(1)从待排序序列中,找到关键字最小的元素;
(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
图示说明
实现
private static int[] selectSort(int [] array, int low, int high) { int index=0; int temp; int i=low,j; for(;iarray[j]) { index=j; } } temp=array[index]; array[index]=array[i]; array[i]=temp; } return array; }
简单分析
时间复杂度 O(n^2)
空间复杂度O(1)
不满足稳定排序
优化
思路就是同时从两边选最大值和最小值
实现
private static int[] selectSort2(int []array, int left , int right) { int i, min, max; int temp; for (; leftarray[max]){ max = i; } } if (min != left) //在原地就不交换 { temp = array[left]; array[left] = array[min]; array[min] = temp; if (max == left) //如果最大值在最左边,最左边已经存了最小值,所以最大值最新的下标应该是本来最小值的下标 { max = min; } } if (max != right) { temp =array[right]; array[right] = array[max]; array[max] = temp; } } return array; }
转载地址:http://hlfq.baihongyu.com/