我发现很多公司面试的时候都会出一道冒泡算法的题,这么基础的算法,一般程序员应该都写得出来,但是今天我在网上看了一下,发现很多文章中的冒泡算法都是错的,根本就不是冒泡算法!还堂而皇之的说什么解析冒泡算法,真是误导新人啊。我就直接上代码了,这,才是冒泡算法。
<?phpfunction bubbleSort($ary){ $len = count($ary); for ($i=0; $i < $len - 1; $i++) { for ($j=0; $j < $len - 1 -$i; $j++) { if ($ary[$j] > $ary[$j + 1]) { $tmp = $ary[$j]; $ary[$j] = $ary[$j + 1]; $ary[$j + 1] = $tmp; } } } return $ary;}$ary = [7,6,789,3,56,8,1234,45];$newAry = bubbleSort($ary);print_r($newAry);?>
好吧,下面我就说说,什么不是冒泡算法。
当然啦,首先要说说什么才是冒泡算法,它的作用是把一个乱序数组按照大小顺序排列。实现原理我就直接拿个实例来说明吧。
$ary = [7,6,78,1];把这个数组从小到大进行排列,首先把第一个数和第二个数进行比较,在这个数组里就是7和6比较,7比6大,第一次循环后数组就变成这个样子。
$ary = [6,7,78,1];第二次循环7和78比较,结果不变。
$ary = [6,7,78,1];
第三次78和1比较,78比1大,调换位置,结果
$ary = [6,7,1,78];这样内部就循环完一次了,开始进行第二次循环,跟上面一样的,我就不细写了。
这就是冒泡算法,名字起得非常形象,就像一个个小泡泡往上冒一样。
但是我在百度搜索“冒泡算法”,出来的第一篇文章是这个
经典排序算法 - 冒泡排序Bubble sort
他给出的代码是这样的:
html' target='_blank'>static void bubble_sort(int[] unsorted) { for (int i = 0; i < unsorted.Length; i++) { for (int j = i; j < unsorted.Length; j++) { if (unsorted[i] > unsorted[j]) { int temp = unsorted[i]; unsorted[i] = unsorted[j]; unsorted[j] = temp; } } } } static void Main(string[] args) { int[] x = { 6, 2, 4, 1, 5, 9 }; bubble_sort(x); foreach (var item in x) { Console.WriteLine(item); } Console.ReadLine(); }这明显不是冒泡算法好吗?!
这个算法是从一个数组的第一个数开始,分别与他后面的所有数字比较,如果比后面的数字大,就互相调换位置,虽然最后也能得到正确结果,但这根本不是冒泡算法,可能叫另一种算法吧。真是误人子弟。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答