PHP排序算法(插入,选择,交换,冒泡,快速)

简介:
Java代码   收藏代码
  1. <?php  
  2. //冒泡排序  
  3. function BubbleSort($arr) {  
  4.     // 获得数组总长度  
  5.     $num = count($arr);  
  6.     // 正向遍历数组  
  7.     for ($i = 1; $i < $num; $i++) {  
  8.         // 反向遍历  
  9.         for ($j = $num - 1; $j >= $i ; $j--) {  
  10.             // 相邻两个数比较  
  11.             if ($arr[$j] < $arr[$j-1]) {  
  12.                 // 暂存较小的数  
  13.                 $iTemp = $arr[$j-1];  
  14.                 // 把较大的放前面  
  15.                 $arr[$j-1] = $arr[$j];  
  16.                 // 较小的放后面  
  17.                 $arr[$j] = $iTemp;  
  18.             }  
  19.         }  
  20.     }  
  21.     return $arr;  
  22. }  
  23.   
  24. // 交换法排序  
  25. function ExchangeSort($arr){  
  26.     $num = count($arr);  
  27.     // 遍历数组  
  28.     for ($i = 0;$i < $num - 1; $i++) {  
  29.         // 获得当前索引的下一个索引  
  30.         for ($j = $i + 1; $j < $num; $j++) {  
  31.             // 比较相邻两个的值大小  
  32.             if ($arr[$j] < $arr[$i]) {  
  33.                 // 暂存较小的数  
  34.                 $iTemp = $arr[$i];  
  35.                 // 把较大的放前面  
  36.                 $arr[$i] = $arr[$j];  
  37.                 // 较小的放后面  
  38.                 $arr[$j] = $iTemp;  
  39.             }  
  40.         }  
  41.     }  
  42.     return $arr;  
  43. }  
  44.   
  45. // 选择法排序  
  46. function SelectSort($arr) {  
  47.     // 获得数组总长度  
  48.     $num = count($arr);  
  49.     // 遍历数组  
  50.     for ($i = 0;$i < $num-1; $i++) {  
  51.         // 暂存当前值  
  52.         $iTemp = $arr[$i];  
  53.         // 暂存当前位置  
  54.         $iPos = $i;  
  55.         // 遍历当前位置以后的数据  
  56.         for ($j = $i + 1;$j < $num; $j++){  
  57.             // 如果有小于当前值的  
  58.             if ($arr[$j] < $iTemp) {  
  59.                 // 暂存最小值  
  60.                 $iTemp = $arr[$j];  
  61.                 // 暂存位置  
  62.                 $iPos = $j;  
  63.             }  
  64.         }  
  65.         // 把当前值放到算好的位置  
  66.         $arr[$iPos] = $arr[$i];  
  67.         // 把当前值换成算好的值  
  68.         $arr[$i] = $iTemp;  
  69.     }  
  70.     return $arr;  
  71. }  
  72.   
  73. // 插入法排序  
  74. function InsertSort($arr){  
  75.     $num = count($arr);  
  76.     // 遍历数组  
  77.     for ($i = 1;$i < $num; $i++) {  
  78.         // 获得当前值  
  79.         $iTemp = $arr[$i];  
  80.         // 获得当前值的前一个位置  
  81.         $iPos = $i - 1;  
  82.         // 如果当前值小于前一个值切未到数组开始位置  
  83.         while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {  
  84.             // 把前一个的值往后放一位  
  85.             $arr[$iPos + 1] = $arr[$iPos];  
  86.             // 位置递减  
  87.             $iPos--;  
  88.         }  
  89.         $arr[$iPos+1] = $iTemp;  
  90.     }  
  91.     return $arr;  
  92. }  
  93.   
  94. // 快速排序  
  95. function QuickSort($arr){  
  96.     $num = count($arr);  
  97.     $l = $r = 0;  
  98.     $left = $right = array();  
  99.     // 从索引的第二个开始遍历数组  
  100.     for ($i = 1;$i < $num; $i++) {  
  101.         // 如果值小于索引1  
  102.         if ($arr[$i] < $arr[0]) {  
  103.             // 装入左索引数组(小于索引1的数据)  
  104.             $left[] = $arr[$i];  
  105.             $l++;  
  106.         } else {  
  107.             // 否则装入右索引中(大于索引1的数据)  
  108.             $right[] = $arr[$i];  
  109.             $r++; //  
  110.         }         
  111.     }  
  112.     // 如果左索引有值 则对左索引排序  
  113.     if($l > 1) {  
  114.         $left = QuickSort($left);  
  115.     }  
  116.     // 排序后的数组  
  117.     $new_arr = $left;  
  118.     // 将当前数组第一个放到最后  
  119.     $new_arr[] = $arr[0];  
  120.     // 如果又索引有值 则对右索引排序  
  121.     if ($r > 1) {  
  122.         $right = QuickSort($right);  
  123.     }  
  124.     // 根据右索引的长度再次增加数据  
  125.     for($i = 0;$i < $r; $i++) {  
  126.         $new_arr[] = $right[$i];  
  127.     }  
  128.     return $new_arr;  
  129. }  
  130. ?>  
相关文章
|
1月前
|
搜索推荐
排序算法之快排,希尔和冒泡
排序算法之快排,希尔和冒泡
|
3月前
|
搜索推荐
深入探究常用排序算法:冒泡、插入、选择与快速排序
深入探究常用排序算法:冒泡、插入、选择与快速排序
|
3月前
|
搜索推荐 Java
排序算法-冒泡、选择、堆、插入、归并、快速、希尔
排序算法-冒泡、选择、堆、插入、归并、快速、希尔
12 0
|
5月前
|
搜索推荐 算法 PHP
PHP 数组(Array) - 排序算法
PHP 数组(Array) - 排序算法
20 0
|
6月前
|
算法 JavaScript 搜索推荐
[JavaScript] 常用算法介绍「冒泡算法」
JS中的冒泡排序算法(Bubble Sort)是一种简单而常用的排序算法。它通过多次迭代比较相邻的元素,并根据需要交换它们的位置,使得每一轮迭代都能找到当前数据集中的最大(或最小)值,并将其移至合适的位置。
|
6月前
|
存储 搜索推荐 C语言
七个常用的排序算法---快排\归排\希尔\插入\选择\冒泡\堆排(二)
七个常用的排序算法---快排\归排\希尔\插入\选择\冒泡\堆排(二)
35 0
|
6月前
|
搜索推荐
七个常用的排序算法---快排\归排\希尔\插入\选择\冒泡\堆排(一)
七个常用的排序算法---快排\归排\希尔\插入\选择\冒泡\堆排(一)
43 0
|
6月前
|
存储 算法 搜索推荐
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)2
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)2
140 0
|
6月前
|
存储 算法 搜索推荐
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)1
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)1
105 0
|
7月前
|
存储 搜索推荐 算法
用PHP实现经典的5种排序算法
排序算法是一种将一组无序的数据元素按照某个规则(大小、字母序等)排列成有序的序列的算法。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。

相关产品

  • 云迁移中心