Discuz教程网

php四种常用排序方法的基本思想和

[复制链接]
authicon dly 发表于 2011-1-7 12:37:42 | 显示全部楼层 |阅读模式
插入排序(Insertion Sort),选择排序(Selection Sort),冒泡排序和快速排序是我们经常会用到的排序算法。下面是这几种算法的基本思想和相对应的PHP实现代码。

插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
  1. //插入排序(一维数组)
  2. function insert_sort($arr){
  3.     $count = count($arr);
  4.     for($i=1; $i<$count; $i++){
  5.         $tmp = $arr[$i];
  6.         $j = $i - 1;
  7.         while($arr[$j] > $tmp){
  8.             $arr[$j+1] = $arr[$j];
  9.             $arr[$j] = $tmp;
  10.             $j--;
  11.          }
  12.      }
  13.     return $arr;
  14. }
复制代码


选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
  1. //选择排序(一维数组)
  2. function select_sort($arr){
  3.     $count = count($arr);
  4.     for($i=0; $i<$count; $i++){
  5.         $k = $i;
  6.         for($j=$i+1; $j<$count; $j++){
  7.             if ($arr[$k] > $arr[$j])
  8.                 $k = $j;
  9.             if ($k != $i){
  10.                 $tmp = $arr[$i];
  11.                 $arr[$i] = $arr[$k];
  12.                 $arr[$k] = $tmp;
  13.              }
  14.          }
  15.      }
  16.     return $arr;
  17. }
复制代码


冒泡排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
  1. //冒泡排序(一维数组)
  2. function bubble_sort($array){
  3.     $count = count($array);
  4.     if ($count <= 0) return false;
  5.     for($i=0; $i<$count; $i++){
  6.         for($j=$count-1; $j>$i; $j--){
  7.             if ($array[$j] < $array[$j-1]){
  8.                 $tmp = $array[$j];
  9.                 $array[$j] = $array[$j-1];
  10.                 $array[$j-1] = $tmp;
  11.              }
  12.          }
  13.      }
  14.     return $array;
  15. }
复制代码

快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。
  1. //快速排序(一维数组)
  2. function quick_sort($array){
  3.   if (count($array) <= 1) return $array;

  4.   $key = $array[0];
  5.   $left_arr = array();
  6.   $right_arr = array();
  7.   for ($i=1; $i<count($array); $i++){
  8.     if ($array[$i] <= $key)
  9.       $left_arr[] = $array[$i];
  10.     else
  11.       $right_arr[] = $array[$i];
  12.   }
  13.   $left_arr = quick_sort($left_arr);
  14.   $right_arr = quick_sort($right_arr);

  15.   return array_merge($left_arr, array($key), $right_arr);
  16. }
复制代码







上一篇:php常用函数类
下一篇:PHP图片压缩的类
authicon №小乖 发表于 2011-6-18 19:59:50 | 显示全部楼层
顶啦,不错吧
authicon Cute宝贝儿 发表于 2011-6-20 23:59:56 | 显示全部楼层
哈哈,支持了
authicon rin421 发表于 2011-6-21 11:59:57 | 显示全部楼层
继续来索要
authicon qqoxygen 发表于 2011-6-22 00:01:21 | 显示全部楼层
偶的天啊!爱死你了
authicon summmer 发表于 2011-6-22 23:59:53 | 显示全部楼层
回贴下载呀
authicon 蓝天blue 发表于 2011-6-27 10:00:17 | 显示全部楼层
不错,谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 15:34

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表