php快速排序的三种实现(吊打面试官)
来源:互联网 发布:域名被抢注怎么办 编辑:程序博客网 时间:2024/06/16 07:45
php这个语言很有意思,通过数组合并就可以“偷懒”实现快速排序,233333
相比较python的缜密和巧妙,这个方法可以说很不要脸了
具体实现代码如下,有时间补一个有完整的数值交换过程的代码
public function quickSort($data){ $size = count($data); if($size>1) { $key = $data[0]; $l = $r = []; for ($i = 1; $i < $size; $i++) { if ($data[$i] >= $key) $r[] = $data[$i]; else $l[] = $data[$i]; } $l_re = quickSort($l); $r_re = quickSort($r); return array_merge($l_re, [$key], $r_re); } else return $data;}
补上有数值交换过程的代码,效率可能不及上面,重在过程理解
public function quickSortReal($data){ $size = count($data); if($size>1) { $key = $data[0]; $i = 0; $j = $size-1; while($i<$j) { while($i<$j && $data[$j]>=$key) $j--; $data[$i] = $data[$j]; $data[$j] = $key;//用于交换数值,但是后面又会被覆盖,所以该行代码没有多大意义 while($i<$j && $data[$i]<=$key) $i++; $data[$j] = $data[$i]; $data[$i] = $key; } if($i == 0) $l = []; else $l = quickSortReal(array_slice($data,0,$i)); if($i == $size-1) $r = []; else $r = quickSortReal(array_slice($data,$i+1,$size+1-$i)); return array_merge($l,[$key],$r); }else return $data;}
第一种方法取巧,第二种方法中规中矩,还有第三种方法,可以说比较有技巧了,利用php的引用,一个数组就能完成整个排序过程,不用生成很多过程数组,很大程度的降低了运行内存,提高了代码效率,有空我会补上代码。
补上第三种方法,看着舒服多了
public function quickSortRefer(&$data,$start,$end){ $i = $start; $j = $end; if($i >= $j) return $data; else $key = $data[$i]; while($i<$j) { while($i<$j && $data[$j] >= $key) $j--; $data[$i] = $data[$j]; $data[$j] = $key;//无用功的一行代码 数值交换 可以注释掉 while($i<$j && $data[$i] <= $key) $i++; $data[$j] = $data[$i]; $data[$i] = $key; } $this->quickSortRefer($data,0,$i-1); $this->quickSortRefer($data,$i+1,$end); return $data;}
目前只想到这三种,欢迎补充
阅读全文
0 0
- php快速排序的三种实现(吊打面试官)
- 三大面试排序的归并以及递归实现--快速排序、归并排序、堆排序
- 快速排序的三种实现方法
- php快速排序的实现
- 三种快速排序算法的实现(递归算法、非递归算法、三路划分快速排序)
- 三种快速排序算法的实现(递归算法、非递归算法、三路划分快速排序)
- 三种快速排序算法的实现(递归算法、非递归算法、三路划分快速排序)
- 排序算法-快速排序(三种实现方案)
- PHP几种排序的实现,面试干货
- 快速排序的三种不同的实现方式。
- PHP实现快速排序
- php实现快速排序
- PHP实现快速排序
- PHP实现快速排序
- 快速排序PHP实现
- PHP实现快速排序
- PHP实现快速排序
- php实现快速排序
- JUnit -- 概念及其应用
- <1>Java的工作方式
- 编码 —— 差错检验
- 自我修养
- java并发基础(四)--- 取消与中断
- php快速排序的三种实现(吊打面试官)
- Python 线程池(threadpool)
- PreparedStatement 、CallableStatement和ResultSet
- hdu1505 City game(最大子矩阵)
- redis使用心得,连接不上解决方法
- Wannafly挑战赛1 B.Xorto 两区间异或和
- 1.1Java语言发展史和平台概述
- vuejs开发音乐播放器(二):单歌手歌单列表界面
- 基于形状的模板匹配,手工绘制ROI