PHP冒泡排序说明。
时间:2010-08-23
来源:互联网
<?php //冒泡排序(一维数组) function bubble_sort($array) { $count = count($array); if ($count <= 0) return false; for($i=0; $i<$count; $i++) { for($j=$count-1; $j>$i; $j--) { //如果后一个元素小于前一个,则调换位置 if ($array[$j] < $array[$j-1]) { $tmp = $array[$j]; $array[$j] = $array[$j-1]; $array[$j-1] = $tmp; } } } return $array; } //使用实例 $arr = array(49, 38, 65, 97, 76, 13, 27); $arr = bubble_sort($arr); print_r($arr); ?> 排序实现过程如下: 49 38 65 97 76 13 27 38 49 65 97 76 13 27 比较第1个和第2个数,小的放前边,大的放后边 38 49 65 97 76 13 27 比较第2个和第3个数,小的放前边,大的放后边 38 49 65 97 76 13 27 比较第3个和第4个数,小的放前边,大的放后边 38 49 65 76 97 13 27 比较第4个和第5个数,小的放前边,大的放后边 38 49 65 76 13 97 27 比较第5个和第6个数,小的放前边,大的放后边 38 49 65 76 13 27 97 比较第6个和第7个数,小的放前边,大的放后边 至此,第一趟比较结束,得到以下排序: 38 49 65 76 13 27 97 然后按照第一趟排序的方法继续比较,直到完成排序。 <?php //快速排序(数组排序) function quick_sort($array) { if (count($array) <= 1) return $array; $key = $array[0]; //把数组的第一个元素作为关键数据 $left_arr = array(); $right_arr = array(); for ($i=1; $i<count($array); $i++) { if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr, array($key), $right_arr); } $arr = array(49, 38, 65, 97, 76, 13, 27); $aResule = quick_sort($arr); print_r($aResule); 快速查找算法过程: 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是: 1)设置两个变量I、J,排序开始的时候:I=1,J=N-1; 2)以第一个数组元素作为关键数据,赋值给X,即 X=A[0]; 3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,让该值与X交换(找到就行.找到后i大小不变); 4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于X的值,让该值与X交换(找到就行.找到后j大小不变); 5)重复第3、4步,直到 I=J; (3,4步是在程序中没找到时候j=j-1,i=i+1。找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+或j+完成的最后另循环结束) 49 38 65 97 76 13 27 这里49为关键数据 27 38 65 97 76 13 49 从后往前查找找第1个小于关键数据49的数27并与49交换位置 27 38 49 97 76 13 65 从前往后查找找第1个大于关键数据49的数65并与49交换位置 27 38 13 97 76 49 65 从后往前查找找第1个小于关键数据49的数13并与49交换位置 27 38 13 49 76 97 65 从前往后查找找第1个大于关键数据49的数97并与49交换位置 至此,49到了这组数据的中间位置,不能再继续查找下去。然后将该组数据分成以下三部分 {27 38 13} 49 {76 49 97} {27 38 13}和{76 97 65}分别取出关键数据27、76按照以上方法排序 27 38 13 13 38 27 从后往前查找找第1个小于关键数据27的数13并与27交换位置 13 27 38 从前往后查找找第1个大于关键数据27的数38并与27交换位置 到此,关键数据27到了中间位置,查询结束。 76 97 65 从后往前查找找第1个小于关键数据76的数65并与76交换位置 65 76 97 到此,关键数据76到了中间位置,查询结束。 最后三部分数据组合在一起,即为快速查找的结果: 13 27 38 49 65 76 97 |
作者: ★star★ 发布时间: 2010-08-23
讲解很详细
这个冒泡排序是属于算法还是技巧?
这个冒泡排序是属于算法还是技巧?
作者: 福春 发布时间: 2010-08-23
这个写的还不够具体,我总结了一个具体的,在资源共享区里面.
作者: ★star★ 发布时间: 2010-08-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28