版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Abel_Liujinquan/article/details/89322368
1、排序步骤
对n个记录进行扫描,选择最小的记录,将其放在第一个位置,接着在剩下的n-1个记录中扫描,选择最小的记录将其放到第二个位置,不断重复这个过程,知道剩下最后一个记录为止。
示例代码:
//简单选择排序方法
public static void selectSort(int[] array, int length) {
int i,j,min,temp;
for (i=0; i<length-1; i++) {
min = i;
for (j=i; j<length-1; j++) {
if (array[j+1]<array[min]) { //通过比较记录最小值的下标
min = j+1;
}
}
temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
//主测试程序
public static void main(String[] args) {
int[] a = {4,5,4,2,8,1,6,1,7};
selectSort(a,a.length);
for(int i=0; i<a.length; i++) {
System.out.println(a[i]);
}
}
输出结果:
分析:
简单选择排序算法的时间复杂度为
,因为不管是最好情况还是最坏情况,找最小数的过程都需要遍历一遍。
2、简单选择排序的优化
如果在每一次查找最小值的时候,也可以找到一个最大值,然后将两者分别放在它们应该出现的位置,这样遍历的次数就比较少了,下边给出代码实现:
//简单选择排序的优化方法
public static void betterSelectSort(int[] array, int length) {
int left,right,temp,i;
left = 0;
right = length - 1;
int min = left;
int max = right;
while(left<right) {
min = left;
max = right;
for (i=left; i<=right; i++) {
if (array[i]<array[min]) { //通过比较记录最小值的下标
min = i;
}
if(array[i]>array[max]) {
max = i;
}
}
temp = array[left];
array[left] = array[min];
array[min] = temp;
temp = array[right];
array[right] = array[max];
array[max] = temp;
left++;
right--;
}
}
分析:
这种优化后的简单选择排序的时间复杂度是
还是
。