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. ?>  
相关文章
|
8天前
|
算法
【优选算法专栏】专题九:链表--------两两交换链表中的节点
【优选算法专栏】专题九:链表--------两两交换链表中的节点
16 0
|
1月前
|
算法 搜索推荐 JavaScript
NodeJ实现冒泡算法
NodeJ实现冒泡算法
16 0
|
1月前
|
算法 搜索推荐 Java
Java实现冒泡算法
Java实现冒泡算法
11 0
|
4月前
|
存储 算法 安全
百度搜索:蓝易云【php几种常用的加密解密算法】
请注意,以上算法都有各自的特点和用途,选择合适的加密解密算法应根据具体需求和安全性要求。此外,加密只是数据保护的一部分,安全实现还应考虑其他因素,如密钥管理、访问控制和安全传输等。
58 0
|
24天前
|
存储 算法 搜索推荐
【算法】七大经典排序(插入,选择,冒泡,希尔,堆,快速,归并)(含可视化算法动图,清晰易懂,零基础入门)
【算法】七大经典排序(插入,选择,冒泡,希尔,堆,快速,归并)(含可视化算法动图,清晰易懂,零基础入门)
|
5月前
|
搜索推荐 Java
排序算法-冒泡、选择、堆、插入、归并、快速、希尔
排序算法-冒泡、选择、堆、插入、归并、快速、希尔
14 0
|
6月前
|
算法
【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等
【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等
|
2月前
|
搜索推荐 算法
在冒泡排序算法中,为什么每次比较相邻的元素时都要进行交换?
【2月更文挑战第8天】【2月更文挑战第21篇】在冒泡排序算法中,为什么每次比较相邻的元素时都要进行交换?
|
2月前
|
算法 测试技术 C++
【动态规划】【C++算法】801. 使序列递增的最小交换次数
【动态规划】【C++算法】801. 使序列递增的最小交换次数
|
2月前
|
算法 C语言
C语言数组实例(冒泡算法、猜数字)
C语言数组实例(冒泡算法、猜数字)
17 0