选择排序是有三个记录值,其中一个记录值标记着需要比较的数组的第一个值,也是变换后的最小值。其中两个记录值记录需要比较的两个对象,而且记录临时最小值的位置和记录另一个还未比较的数据。
public class ArraySel { private long a[]; private int nElems; public ArraySel(int maxSize) { a=new long[maxSize]; nElems=0; } //插入 public void insert(long value) { a[nElems++]=value; } //显示 public void display() { for(int j=0;j<nElems;j++) System.out.print(a[j]+" "); System.out.println(); } //排序 public void selectionSort() { int out,in,min; for(out=0;out<nElems;out++) { min=out;//每一次循环,out与min的位置都一样 //需要比较的另一个对象的开始位置是第二个,即out+1或者min+1 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 Test { public static void main(String[] args) { int maxSize=100; ArraySel arrayBub=new ArraySel(maxSize); arrayBub.insert(77); arrayBub.insert(99); arrayBub.insert(44); arrayBub.insert(55); arrayBub.insert(22); arrayBub.insert(88); arrayBub.insert(11); arrayBub.insert(0); arrayBub.insert(66); arrayBub.insert(33); arrayBub.display(); arrayBub.selectionSort(); arrayBub.display(); } }