选择排序:
元素个数:n
外层循环:0<=out<=n-2,循环到倒数第二个元素
内层循环:out+1<=in<=n-1,从out后一个元素循环到最后一个元素
过程:将out后面的所有元素与当前out元素值比较,保证out位置的元素是从out到最后的这些元素中最小的。
package datastructure.c3.sort.selectsort;
public class ArraySel {
private long[] a;
private int nElems;
public ArraySel(int max){
a=new long[max];
nElems=0;
}
public void insert(long value){
a[nElems]=value;
nElems++;
}
public void display(){
for(int j=0;j<nElems;j++){
System.out.print(a[j]+" ");
}
System.out.println(" ");
}
/**
* 选择排序
* 比较效率O(N^2),交换效率O(N)
*/
public void selectionSort(){
int out,in,min;
for(out=0;out<nElems-1;out++){
min=out;
for(in=out+1;in<nElems;in++){
if(a[in]<a[min]){
min=in;
}
}
swap(out,min);
}
}
private void swap(int one,int two){
long temp=a[one];
a[one]=a[two];
a[two]=temp;
}
}
package datastructure.c3.sort.selectsort;
public class SelectSortApp {
public static void main(String[] args) {
int maxSize=100;
ArraySel arr;
arr=new ArraySel(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33);
arr.display();
arr.selectionSort();
arr.display();
}
}
当数组较小,且交换的时间比比较的时间大得多时(极端情形如逆序),选择排序较快。