学过数据结构和算法的人都知道冒泡排序是最经典的排序算法之一,但大部分都只是知道大概意思,而没有从根本上理解冒泡排序的实现原理,因此到实际需要给出代码实现的时候,往往都是google之。鉴于很多公司在技术面试的时候也都会考到这道算法题,下面本文将从根本上详细解释冒泡排序算法的实现机理,作为参考,希望大家以后都能对此游刃有余!本人对冒泡排序的理解用6个字概括起来就是-“浮大泡,沉小泡”,就像水里的鱼呼吸的时候会吐出一连串的气泡,留心观察的人会发现,这个时候,这串气泡里首先浮出来的一定是最大的气泡,再往下就越来越小,这便是本文对冒泡排序字面上的解释。
上图右边所示为水中气泡的模拟现象,将其水平放置之后正体现了堆栈内存中一维数组中元素从小到达的排列景象。以下面的一维数组为例。
分析以上图示,可知,如果一维数组有5个元素,那么需要经历4次外循环才能排序完毕,第一次外循环需要4次内循环,第二次外循环需要3次内循环,第三次需要2次,第四次需要1次内循环,内循环里需要做的就是比较前后元素的大小,如果前面元素比后面元素大则交换。那么总结如下:
假设一维数组的大小为n,那么冒泡排序需要经历n-1次外循环,第一次外循环需要n-1次内循环,第二次外循环需要n-2次内循环,第三次外循环需要n-3次内循环,......,以此类推,第i次外循环需要n-i次内循环,代码如下:
for(int i=0;ia[j+1]){ int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } }
以下给出本程序的完整代码-java版!
public class BubbleSort{ public static void main(String[] args){ int[] a = {5,4,3,2,1}; System.out.println("----------------before all sort:-----------------"); print(a); bubbleSort(a); System.out.println("----------------after all sort:------------------"); print(a); } public static void bubbleSort(int[] a){ for (int i=0;ia[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } System.out.println("**********************after inner "+(j+1)+" times sort**********************"); print(a); } System.out.println("------------------------after "+(i+1)+" times sort--------------------------"); print(a); } } public static void print(int[] a){ for (int i=0;i
运行结果显示如下: