算法基础--简单选择排序
Posted 谓戒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础--简单选择排序相关的知识,希望对你有一定的参考价值。
基本思想:
在所有元素中,选择最小的一个数和第一个元素交换位置;然后选择第二小的数和第二个元素交换位置,以此类推,直到结束。
时间复杂度计算:
(1)最好的情况是不用交换位置,但是比较的次数无法减少,交换次数O(0)
(2)最坏的情况也是一样,交换位置次数最多,但是比较次数还是一样,交换次数O((n+1)*(n-2)/2) = O(n^2)
(3)比较次数: O(n^2)
(4)所以无论好坏还是平均,时间复杂度都是O(n^2);
代码:
public static void selectSort( int[] arr){
int a = arr.length;
for(int i = 0 ; i < a ; i ++){
int min = i;
for(int j = i ; j < a ;j++ ){
if(arr[j] < arr[min]){
min = j;
}
}
if(min != i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
优化:简单选择排序每次循环都只能取出最小的一个元素,那么优化可以让他取出两个元素,最小和最大的两个;
复杂度计算:虽然还是O(n^2),但是大约是改良前的四分之一;虽然空间复杂度还是O(n),但是空间复杂度从之前的O(1)提升到O(2);
public static void selectSort2(int[] arr){
int a = arr.length;
for(int i = 0 ; i <= a/2 ; i++){
int min = i;
int max = a-1-i;
for(int j = i ; j < a-i ;j++) {
if(arr[j] < arr[min]){
min = j;
}
if(arr[j] > arr[max]){
max = j;
}
}
if(min != i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
if(max != a -1-i){
int temp = arr[a-1-i];
arr[a-1-i] = arr[max];
arr[max] = temp;
}
}
}
以上是关于算法基础--简单选择排序的主要内容,如果未能解决你的问题,请参考以下文章