摘要:
编程语言千千万,都离不开各种排序,比如比较典型的冒泡排序、快速排序、插入排序等,当然还有为之所动容的猴子排序、睡眠排序!!!本文只讲如何使用PHP实现冒泡排序的算法!
原理分析
本文使用的排序数组数据如下:$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 '
';
//数组长度
$n = count($arr1);
//控制需要进行的总趟数(数组从0开始所以要减1)
for ($i = 0; $i
//在每一趟里面,控制进行的比较次数,比较次数为总趟数减去外for循环的趟数
for ($k = 0; $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 '
';
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 '
';
echo '交换后: ';
print_r($arr2);
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少
打开支付宝扫一扫,即可进行扫码打赏哦