[PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
冒泡排序:
function bubbleSort($array){ $len=count($array);//该层循环控制 需要冒泡的轮数for($i=1;$i<$len;$i++){ //该层循环用来控制每轮 冒出一个数 需要比较的次数for($k=0;$k<$len-$i;$k++){if($array[$k]>$array[$k+1]){$tmp=$array[$k+1];$array[$k+1]=$array[$k];$array[$k]=$tmp;}}}return $array;
}
快速排序:
function quickSort($array){if (count($array) <= 1) return $array;$key=$array[0];$left_arr=array();$right_arr=array();for($i=1;$i<count($array);$i++){if($array[$i]<=$key){$left_arr[]=$array[$i];}else{$right_arr[]=$array[$i];} }$left_arr=quickSort($left_arr);$right_arr=quickSort($right_arr);return array_merge($left_arr,array($key),$right_arr);
}
选择排序:
function selectSort($array) {//双重循环完成,外层控制轮数,内层控制比较次数$len=count($array);for($i=0; $i<$len-1; $i++) {//先假设最小的值的位置$p = $i; for($j=$i+1; $j<$len; $j++) {//$array[$p] 是当前已知的最小值if($array[$p] > $array[$j]) {//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。$p = $j;}}//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。if($p != $i) {$tmp = $array[$p];$array[$p] = $array[$i];$array[$i] = $tmp;}}return $array; //返回最终结果
}
插入排序:
function insertSort($array) {$len=count($array); for($i=1, $i<$len; $i++) {$tmp = $array[$i];//内层循环控制,比较并插入for($j=$i-1;$j>=0;$j--) {if($tmp < $array[$j]) {//发现插入的元素要小,交换位置,将后边的元素与前面的元素互换$array[$j+1] = $array[$j];$array[$j] = $tmp;} else {//如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。break;}}}return $array;
}
二叉树(二分法)排序:
/**
* 递归方法实现二分查找法.
* @param Array数组
* @param low 数组第一位置
* @param high 最高
* @param k 要查找的值.
* @return 返回值. */
function binSearch($array, $low, $high, $k){if ($low <= $high){$mid = intval(($low+$high)/2);if ($array[$mid] == $k){return $mid;}elseif ($k < $array[$mid]){return binSearch($array, $low, $mid-1, $k);}else{return binSearch($array, $mid+1, $high, $k);}}return -1;
}
转载于:https://www.cnblogs.com/qhorse/p/5429932.html
[PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)相关推荐
- 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并
数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并 第一章 冒泡排序 [1]Bubble_Sort.c 第二章 快速排序 [1]quick_sort.c 第三章 大数据 ...
- 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...
- js实现冒泡排序,快速排序,选择排序
用js冒泡排序,快速排序,选择排序 1.冒泡排序 冒泡排序是比较经典的排序方法,是一种用时间换空间的排序方法.我总结了一下它的特点:(1)它的时间复杂度是:(2)每一趟相邻元素两两比较完毕就会产生最值 ...
- iOS swift 选择排序 冒泡排序 快速排序
返回上级目录:iOS 算法题 三大经典排序 | 冒泡排序,选择排序,快速排序 - 知乎 文章目录 1.选择排序 2.冒泡排序 3.快速排序 1.选择排序 //选择排序 func rankSelect( ...
- 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树
文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...
- 直接插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序的算法分析和具体实现 ...
排序分为内部排序和外部排序 内部排序是把待排数据元素全部调入内存中进行的排序. 外部排序是因数量太大,把数据元素分批导入内存,排好序后再分批导出到磁盘和磁带外存介质上的排序方法. 比较排序算法优劣的标 ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- 简单排序——冒泡排序,选择排序,插入排序,对象排序
2019独角兽企业重金招聘Python工程师标准>>> 1)冒泡排序 package sort; /** * 冒泡排序,每次把数组最大值送到未排序部分的最末端 * @author ...
- 王道八大排序:直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 归并排序 基数排序
文章目录 1.插入排序 1.1直接插入排序 1.2折半插入排序 1.3希尔排序 2.交换排序 2.1冒泡排序 2.2快速排序 3.选择排序 3.1简单选择排序 3.2堆排序 4.归并排序 5.基数排序 ...
- 冒泡排序+快速排序+选择排序(图解)
冒泡排序 原理 假设有10个数,第一轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动:接着第二个数和第三个数比较,如果第二个数大,第二个数和第三个数交换位置,否则不 ...
最新文章
- ios开发国外视频教程(有翻译)
- 1.7 时间延时器和类的别名
- 计算机语言 时间,甲骨文将ISO日期到计算机的语言环境日期/时间
- 【PAT甲级 LinkedHashMap】1041 Be Unique (20 分) Java、C++版
- vasp服务器中断,求助VASP能带计算的中断原因
- YOLOv1-YOLOv4
- 删除“ie8左侧收藏夹图标(黄星星)”及“恢复”的方法
- C++ 判断字符串是否全是数字
- 以下属于4nf的分解为_数据库原理·模拟试卷及答案(1)
- 将图的广度优先遍历在邻接矩阵和邻接表存储结构上分别实现_《青岛大学-王卓-数据结构》B站学习...
- MapReduce框架Hadoop应用(一)
- fraction类的创建java_设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。(Java语言)...
- 解决搭载M1芯片的Mac上安装犀牛Rhinoceros 7 for Mac的安装教程
- access vba代码全部丢失_Access2016由于无法读取数据库中所含的VBA工程,因此无法打开此数据库。只有先删除VBA工程,然后才能打开数据库...
- 关于Chrome浏览器升级到80版本后受影响的场景以及解决方案
- java设置短信验证码过期时间_实现短信验证码有效时间
- “扣哒杯” AI世青赛全国决赛落幕 集体奖和一等奖附加赛名单揭晓
- 树链剖分 --算法竞赛专题解析(30)
- 秒数转换为天小时分钟秒的格式
- 辉芒微IO单片机FT60F11F-MRB