排序从球员队列最左边0开始,记录下最左边队员身高,与下一个队员比较,如果这个队员比最左边的矮,替换刚才的最矮记录,再向右比较过程中不断更新最矮记录,最后得到最矮队员的下标,将他与最左边的队员交换;之后,从最左+1号队员开始以同样的过程比较,得到次矮队员的下标,将其与最左+1号交换……
public void selectSort(){
int out,in,min;
/*外层循环用循环变量out,从数组开头0开始向高位增长,内层循环用in,从out开始右移*/
for(out=0;out<nElems;out++){
min = out;
for(in=out+1;in<nElems;in++)
if(a[in]<a[min])
min = in;//记录下最小值
swap(out,min);//交换out和min指向的数据项
}
}
package Structure;
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]+" ");
}
}
public void selectSort(){
int out,in,min;
for(out=0;out<nElems;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;
}
}
public class selectSort {
public static void main(String[] args){
int maxSize = 100;
ArraySel arr;
arr = new ArraySel(maxSize);
arr.insert(12);
arr.insert(102);
arr.insert(112);
arr.insert(212);
arr.insert(312);
arr.insert(412);
arr.insert(512);
arr.insert(122);
arr.insert(132);
arr.insert(152);
arr.display();
arr.selectSort();
System.out.println("");
arr.display();
}
}
/*12 102 112 212 312 412 512 122 132 152
12 102 112 122 132 152 212 312 412 512 */