算法思想:
数组的第一个元素与后面的每一个元素比较,将最小的元素放在第一位,第一位排好,为最小的元素;数组的第二位元素与其后面的每一个元素比较,将剩余元素中值最小的放到第二位,第二位排好。以此类推,直到将最后一位元素排好。
代码描述:
/**
* 直接选择排序
* @param A
*/
public void sort(int A[]){
for(int i=0;i<A.length;i++){
int min=i,x; //假设i为最小值的下标
for(int j=i+1;j<A.length;j++){
if(A[j]<A[min]) //将下标为i的值与i之后的每个值比较,将值小的下标赋给min
min=j; //找到更小的值,用min标记下标
}
if(min!=i){
x=A[i]; //临时储存,做交换的中间储存
A[i]=A[min]; //找到最小值,与下标为i的元素交换
A[min]=x;
}
}
}
优点:直接选择排序是选择排序中最简单的一种。
空间性能:需要1个辅助空间(即交换元素的时候,需要额外的空间存储交换的元素)
时间复杂度:该算法共进行了n(n-1)/2次比较,最坏的情况(即全部为递减)最多需要进行n-1次交换,时间复杂度为:O(n^2)