选择排序(SelectionSort )
1.1概述
表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了。
1.2描述
- 初始状态:无序区为R[1..n],有序区为空。
- 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
- n-1趟结束,数组有序化了。
1.3代码
package selectionsort;
import java.util.Arrays;
/**
* @author xgj
*/
public class SelectionSort {
public static void main(String[] args) {
int[] arr = new int[]{1,2,5,7,9,4,6,3,2,8};
SelectionSort.selectionSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void selectionSort(int[] ins){
//经过n-1次提取最小最大值
int n = ins.length;
//控制选择的次数
for(int i=0; i<n-1; i++){
int minIndex = i;
for(int j=i+1; j<n; j++){
if(ins[j]<ins[minIndex]){
minIndex = j;
}
}
if(minIndex != i){
int temp = ins[i];
ins[i] = ins[minIndex];
ins[minIndex] = temp;
}
}
return ;
}
}
1.4分析
T(n) = O(n2)