2011年,C语言老师给我们讲冒泡排序。
2014年,听同学说起他面试时和面试官提起冒泡排序。
2015年,大学本科刚毕业,开始找工作,我还记得我在笔记中写了冒泡排序的代码,结果还真的被问到了。
2019年,公司首席架构师跟我提到冒泡排序。
什么是冒泡排序呢?
冒泡排序,Bubble Sort,通过依次来比较相邻两个元素的大小,在每一次的比较的过程中,两个元素,通过交换来达到有序的目的。
就像碳酸饮料中的气泡一样,从底部一直冒泡到顶部。
我想通过一组数据来阐述冒泡排序的过程。
最后我们使用Java代码来展示上述的算法。
1 private static void sort() { 2 3 Integer[] data = {6,3,2,1,8,9,7,5}; 4 5 for(int i=0; i<data.length-1; i++) { 6 7 for(int j=0; j<data.length-i-1; j++) { 8 9 if(data[j] > data[j+1]) { 10 int k = data[j]; 11 data[j] = data[j+1]; 12 data[j+1] = k; 13 } 14 15 } 16 } 17 18 }
从以上的现象来看,我们得出结论和思考:
1 private static void sort() { 2 3 Integer[] data = {6,3,2,1,8,9,7,5}; 4 5 for(int i=0; i<data.length-1; i++) { 6 7 boolean isSorted = true; 8 9 for(int j=0; j<data.length-i-1; j++) { 10 11 if(data[j] > data[j+1]) { 12 int k = data[j]; 13 data[j] = data[j+1]; 14 data[j+1] = k; 15 16 isSorted = false; 17 } 18 } 19 20 if(isSorted) { 21 break; 22 } 23 } 24 25 }
1 private static void sort() { 2 3 Integer[] data = {6,3,2,1,8,9,7,5}; 4 5 //最后交换的元素的下标 6 int lastIndexOfSwap = 0; 7 //无序数列边界元素的下标 8 int borderIndexOfUnsort = data.length - 1; 9 10 for(int i=0; i<data.length-1; i++) { 11 12 boolean isSorted = true; 13 14 for(int j=0; j<borderIndexOfUnsort; j++) { 15 16 if(data[j] > data[j+1]) { 17 int k = data[j]; 18 data[j] = data[j+1]; 19 data[j+1] = k; 20 21 isSorted = false; 22 23 lastIndexOfSwap = j; 24 } 25 } 26 27 borderIndexOfUnsort = lastIndexOfSwap; 28 29 if(isSorted) { 30 break; 31 } 32 33 } 34 35 }
冒泡排序是最简单的一种排序算法,3个版本演进,也许并没有提高多大的效能,更多应该是对于算法的思维的重要性。
原文:https://www.cnblogs.com/behindyou/p/10567041.html