排序算法小结
2023-06-13 09:12:14 时间
快速排序
十分常用的高效率的算法,其思想是:先选一个标尺,用它把整个队列过一遍筛选,以保证其左边的元素都不大于它,其右边的元素都不小于它
function quickSort($arr){
//获取数组长度
$length = count($arr);
// 判断长度是否需要继续二分比较
if($length <= 1){
return $arr;
}
// 定义两个空数组,用于存放和基准元素的比较后的结果
$left = [];
$right = [];
// 遍历数组
for($i=1; $i < $length; $i++) {
// 和基准元素作比较
if($arr[$i] > $base) {
$right[] = $arr[$i];
}
$left[] = $arr[$i];
}
}
// 然后递归分别处理left和right
$left = quickSort($left);
$right = quickSort($right);
// 合并
return array_merge($left,[$base],$right);
冒泡排序
思路:法如其名,就像冒泡一样,每次从数组中冒出一个最大的数。
比如:2,4,1
第一次冒出4:2,1,4
第二次冒出2:1,2,4
function bubbleSort($arr){
// 获取数组长度
$length = count($arr);
// 第一层循环控制冒泡轮次
for ($i=0; $i < $length-1; $i++) {
// 内层循环控制从第0个键值和后一个键值比较,每次冒出一个最大的数
for($k=0; $k < $length-$i; $k++) {
if($arr[$k] > $arr[$k+1]){
$tmp = $arr[$k+1];
$arr[$k+1] = $arr[$k];
$arr[$k] = $tmp;
}
}
}
return $arr;
}
选择排序
思路:每次选择一个相应的元素,然后将其放到指定的位置
function selectSort($arr){
// 实现思路
// 双重循环完成,外层控制轮数,当前的最小值,内层控制比较次数
// 获取长度
$length = count($arr);
for($i=0; $i < $length - 1; $i++) {
// 假设最小值的位置
$p = $i;
// 使用假设的最小值和其他值比较,找到当前的最小值
for($j=$i+1; $j < $length; $j++) {
// $arr[$p] 是已知的当前最小值
// 判断当前循环值和已知最小值的比较,当发下更小的值时记录下键,并进行下一次比较
if($arr[$p] > $arr[$j]) {
$p = $j;
// 比假设的值更小
}
}
// 通过内部for循环找到了当前最小值的key,并保存在$p中
// 判断 日光当前$p 中的键和假设的最小值的键不一致增将其互换
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
// 返回最终结果
return $arr;
}
相关文章
- 数据结构与算法(十五):二叉排序树[通俗易懂]
- 深入React Diff算法
- 面试题:梯度下降算法中,学习率是不是越大越好?
- 菜鸟的数学建模之路(一):最短路径算法「建议收藏」
- 十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序[通俗易懂]
- 一步一步写算法(之排序二叉树)[通俗易懂]
- 再扣亿点点细节,快速排序算法的分析与优化
- 实例分割综述(单阶段/两阶段/实时分割算法汇总)
- 排序、搜索、 动态规划,DeepMind用一个神经算法学习器给解决了
- 排序算法
- 算法应对电商的各种满减活动
- 网络社群发现算法挖掘bilibili视频流量数据可视化|附代码数据
- 【算法】快速排序
- java冒泡算法
- Java快速排序,堆排序,归并排序,希尔排序等排序算法的实现详解编程语言
- Java实现各种排序算法详解编程语言
- Java学习笔记之十一Java中常用的8大排序算法详解总结编程语言
- java垃圾回收机制,以及常用的回收算法详解编程语言
- Java数据结构和算法(九)——高级排序详解编程语言
- Linux系统磁盘调度算法研究(linux磁盘调度算法)
- C++ nth_element(STL nth_element)排序算法详解
- 单调速率调度(RMS)算法(详解版)
- C++快速排序(递归)算法详解
- 宜远智能CEO吴博:医学影像的数据标注、算法方法与算力优化
- 深入了解MySQL常用的排序算法(mysql的排序算法)
- Oracle排序算法两个列的排序优势(oracle两个列排序)
- java合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- php不用内置函数对数组排序的两个算法代码
- javascript图片相似度算法实现js实现直方图和向量算法
- python计数排序和基数排序算法实例