排序算法---快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序算法原理如下:
首先设定一个分界值,通过该分界值将数组分成左右两部分。
将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
数据演示:
待排序序列: 10 7 15 2 5 27 13
第1轮:
中间值:【10】
<10 放左边数组larr: 7 2 5
>=10 放右边数组rarr: 15 27 13
第1轮后: 7 2 5 【10】 15 27 13
针对左边数组larr 进行上述操作得到:2 5 【7】
针对右边数组rarr 进行上述操作得到:13 【15】 27
再次递归larr: 【2】 5
最后得到 2 5 7 10 13 15 27
代码实现:
function quickSort($arr) {
$len = count($arr);
if($len<=1) {
return $arr;
}
$middle = $arr[0];
$larr = [];
$rarr = [];
for($i=1;$i<$len;$i++) {
if($arr[$i]>$middle){
$rarr[] = $arr[$i];
}else{
$larr[] = $arr[$i];
}
}
$left = quickSort($larr);
$right = quickSort($rarr);
return array_merge($left,array($middle),$right); //array_mrege()参数必须为数组,array($middle)整型强制类型转换为数组
}
print_r(quickSort($arr));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】