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. ?>  
相关文章
|
9月前
|
算法
【优选算法专栏】专题九:链表--------两两交换链表中的节点
【优选算法专栏】专题九:链表--------两两交换链表中的节点
55 0
|
9月前
|
算法 搜索推荐 JavaScript
NodeJ实现冒泡算法
NodeJ实现冒泡算法
62 0
|
9月前
|
算法 搜索推荐 Java
Java实现冒泡算法
Java实现冒泡算法
67 0
|
4月前
|
算法 安全 Java
介绍一下比较与交换算法
【10月更文挑战第20天】介绍一下比较与交换算法
31 0
|
4月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
39 0
|
4月前
|
搜索推荐 算法
排序算法---冒泡&选择&插入总结
排序算法---冒泡&选择&插入总结
25 0
|
6月前
|
搜索推荐 算法
十大排序算法-快排-希尔-堆排-归并-冒泡-桶排-选择-插入-计数-基数
十大排序算法-快排-希尔-堆排-归并-冒泡-桶排-选择-插入-计数-基数
|
6月前
|
数据采集 搜索推荐 算法
【高手进阶】Java排序算法:从零到精通——揭秘冒泡、快速、归并排序的原理与实战应用,让你的代码效率飙升!
【8月更文挑战第21天】Java排序算法是编程基础的重要部分,在算法设计与分析及实际开发中不可或缺。本文介绍内部排序算法,包括简单的冒泡排序及其逐步优化至高效的快速排序和稳定的归并排序,并提供了每种算法的Java实现示例。此外,还探讨了排序算法在电子商务、搜索引擎和数据分析等领域的广泛应用,帮助读者更好地理解和应用这些算法。
63 0
|
7月前
|
算法 PHP
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
47 1
|
8月前
|
算法 PHP 数据中心
基于php雪花算法工具类Snowflake -来自chatGPT
基于php雪花算法工具类Snowflake -来自chatGPT
130 2

热门文章

最新文章