1.冒泡排序算法
冒泡排序算法运行起来很是慢,但在概念上它是排序算法中最简单的。数组
以排列一排人员的身高为例:code
1.比较两个队员排序
2.若是左边的队员高,两个队员交换位置队列
3.向右移动一个位置,比较下面两个队员内存
4.当碰到第一个排定的队员后,就返回到队列的左端从新下一趟排序for循环
class ArrayBub{ private long[] a; private int nElems; public ArrayBub(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(" "); } public void bubbleSort() { int out,in; for(out = nElems-1;out>1;out--) for(in = 0;in<out;in++) if(a[in]>a[in+1]) swap(in,in+1); } public void swap(int one,int two) { long temp = a[one]; a[one] = a[two]; a[two] = temp; } } class bubbleSortApp{ public static void main(String[] args) { int maxSize = 100; ArrayBub arr; arr = new ArrayBub(maxSize); arr.insert(77); arr.insert(99); arr.insert(44); arr.insert(55); arr.insert(22); arr.insert(88); arr.insert(66); arr.insert(33); arr.display(); arr.bubbleSort(); arr.display(); } }
77 99 44 55 22 88 66 33 22 33 44 55 66 77 88 99
冒泡排序的方法为如下代码 class
public void bubbleSort() { int out,in; for(out = nElems-1;out>1;out--) for(in = 0;in<out;in++) if(a[in]>a[in+1]) swap(in,in+1); } public void swap(int one,int two) { long temp = a[one]; a[one] = a[two]; a[two] = temp; }
冒泡排序思路:变量
要将最小的数据项放在数组的最开始,并将最大的数据项放在数组的最后。外层for循环的计数器out从数组的最后开始,既out等于nElems-1,每通过一次循环out减一,下标大于out的数据项都已是排好的,变量out在每完成一次内部循环后左移一位,所以算法就再也不处理那些已经排好的数据了。循环
内存for循环计数器in从数组的最开始算起,即in=0,每完成一次内部循环加一,当它等于out时结束一次循环。在内层for循环体中,数组下标为in,in+1的两个数据项进行比较,若是in的数据>in+1的数据项,则交换来个数据
实际上独立的swap()方法不必定好,由于方法调用会增长一些额外的消耗,因此本身写的话最后将交换直接放在程序中。
冒泡排序为O(N^2)时间级别。