假设有N个运动员,编号0--N-1,从最左边开始:0与1比较,若0比1高,两者交换;接着1与2比较,若1比2高1与2交换……此次最高的排到最右边了完成了一个排序;再一次从左到右比较到N-2号,此次排序次高的排到了N-2号……
public void bubbleSort(){ int out,in; for(out=nElems-1;out>1;out--) for(in=0;ina[in+1]) swap(in,in+1); } }
思路:将最小的数据项放在数组的0位置,将最大数据放在nElems-1,外层for计数器out从数组末尾开始,每经过一次循环out-1,下标大于out数据都已经是排好序的了。out每完成一次内部循环左移一位,因此下次内层循环就不再处理那些已经排好序的数据了。
//bubbleSortArray.javapackage Structure;class bubbleSortArray{ private long[] a; private int nElems; public bubbleSortArray(int max){ a = new long[max]; nElems = 0; } public void insert(long value){ a[nElems] = value; nElems++; } public void display(){ for(int i = 0;i1;out--) for(in=0;in a[in+1]) swap(in,in+1); } } private void swap(int one, int two) { // TODO Auto-generated method stub long temp = a[one]; a[one] = a[two]; a[two] = temp; }}
//bubbleSortTest.javapackage Structure;public class bubbleSortTest { public static void main(String[] args){ int maxSize = 100; bubbleSortArray arr; arr = new bubbleSortArray(maxSize); arr.insert(78); arr.insert(178); arr.insert(708); arr.insert(278); arr.insert(728); arr.insert(718); arr.insert(708); arr.insert(780); arr.insert(478); arr.display(); arr.bubbleSort(); System.out.println(); arr.display(); }}/*78 178 708 278 728 718 708 780 478 78 178 278 478 708 708 718 728 780 */