原理分析
本文使用的排序数组数据如下:
$arr1 = array(18,22,12, 15,23,9);
冒泡排序大致过程:大致遍历一个数组,在此过程中,将相邻的两个单元的值进行比较(俩俩大小相比,左边比右边大就对换位置)
第一趟:如果前面的比后面的大,则将两个值交换位置。这个过程到最后,数组中的最大值一定放在最后位置了。
第二趟:如果将上述过程再进行一遍,则又可以确定剩余数据中的最大值放在倒数第二的位置。
第三躺:然后将上述过程继续进行一遍,则可以继续确定剩余数据中的最大值放在倒数第三的位置。
第N趟:依次类推。。。。。。进行若干次,就排好了。
下方图中所示为上面所列举的算法过程:
规律总结
1.要进行从头到尾两两比较并进行交换位置的趟数为$n-1趟,$n是总个数(数组长度)
2.每次都对相邻的两个数据进行大小比较,如果需要,就交换他们的位置!
3.每趟要比较的次数都比前一趟少1次,第一趟要比较的次数为:$n-1
代码编写
总结了规律,接下来就是写排序算法了,下面为冒泡排序的代码:
//数组数据 $arr1 = array(18, 22, 12, 15, 23, 9); echo '交换前: '; print_r($arr1); echo '<br>'; //数组长度 $n = count($arr1); //控制需要进行的总趟数(数组从0开始所以要减1) for ($i = 0; $i < $n - 1; $i++) { //在每一趟里面,控制进行的比较次数,比较次数为总趟数减去外for循环的趟数 for ($k = 0; $k < ($n - 1) - $i; $k++) { //如果前面一项比后面一项大,就要进行交换 if ($arr1[$k] > $arr1[$k + 1]) { $temp = $arr1[$k]; $arr1[$k] = $arr1[$k + 1]; $arr1[$k + 1] = $temp; } else { //如果左边比右边小,就什么都不做,继续后面两个数的比较,直到后面没有数值为止! } } } echo '交换后: '; print_r($arr1);
数据交换原理
在很多排序算法中,大部分的算法排序都是交换两个值达到排序的目的,下面通过一个简单的故事叙述一下阁主自己所理解的数据交换原理:
在一个月黑风高的夜晚,遇到人生的低谷,我左手拿着醋,右手拿着酱油,究于生活的无奈,我就是要把醋倒进酱油的瓶子,同时也要把酱油倒进装醋的瓶子里。无奈之下我必须得去隔壁废品站借个空瓶子,我得先把醋倒进空瓶子,再把酱油倒进已经空了的醋瓶子,接下来要把装满醋的空瓶子倒进已经空了的酱油瓶子里。这下醋和酱油本质不变,只是将瓶子换一下而已,至于空瓶子,我悄无声息的还给了废品站老板,感谢他的大恩大德!
普通变量的交换:
//普通变量的交换 $cu = "醋"; $jiangyou = "酱油"; //交换$cu,$jiangyou两个变量的值 $kongpingzi = $cu; $cu = $jiangyou; $jiangyou = $kongpingzi; echo '$cu现在是: ' . $cu; echo '<br>'; echo '$jiangyou现在是: ' . $jiangyou;
数组单元的交换:
//数组单元的交换:如下,交换下面数组中的下标为2和下标为6的两个单元值 $arr2 = [2 => 15, 3 => 18, 6 => 20]; echo '交换前: '; print_r($arr2); $temp = $arr2[2]; $arr2[2] = $arr2[6]; $arr2[6] = $temp; echo '<br>'; echo '交换后: '; print_r($arr2);
本文地址:https://www.mainblog.cn/236.html
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。