当前位置:网站首页>PHP常用排序算法
PHP常用排序算法
2022-07-03 07:41:00 【.周周】
1.冒泡排序
基本思想:如下图所示,将一组数据看作一排竖着的气泡,然后让最后一个数与倒数第二个数进行比较,大的就往前移。然后用相同的方法,将倒数第二个数与倒数第三个进行比较,大的往前移,依次类推,最后本轮循环结束后,第一个元素就是最大的了,然后继续循环,得到第二个,第三个……
function BubbleSort(&$arr){ //必须是&$arr,传一个地址,如果是$arr,根据函数调用机制,排序将无法生效
$temp = 0; //中间变量
$flag = false;
//外层循环控制循环次数
for($i = 0; $i < count($arr) - 1; $i++) {
//内层循环控制每一次循环的交换
for($j = 0; $j < count($arr) - 1 - $i; $j++) {
if($arr[$j] > $arr[$j+1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
$flag = true;
}
}
if(!$flag)
break; // 已经是有序
$flag = false;
}
return $arr;
}2.选择排序法
首先,拿第一个和后面所有的比,找出最小的那个数字,然后和第一个数互换(当然,如果是第一个最小,那么就不用互换了),接着循环,即:拿第二个和后面的比较,找出最小的数字,然后和第二个数字互换,依次类推,也就是说每次都是找出剩余最小的值。
function selectSort(&$arr){
$temp = 0; // 中间变量
//外层循环
for($i=0;$i<count($arr)-1;$i++){
//假设第$i个数就是最小的数
//记录假设的最小数的值
$minVal=$arr[$i];
//记录假设的最小数的下标
$minIndex=$i;
for($j=$i+1;$j<count($arr);$j++){
//如果假设的最小值,不是最小
if($minVal>$arr[$j]){
$minVal=$arr[$j];
$minIndex=$j;
}
}
//最后交换
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex]; //循环外面,不能出现$j
$arr[$minIndex]=$temp;
}
return $arr;
}3.插入排序
插入排序的基本思想是:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序
function insertSort(&$arr){
//默认第一个数,即下标为0的数,已经是有序
for($i=1;$i<count($arr);$i++){
//准备插入的数
$insertVal=$arr[$i];
//准备先和$insertIndex比较
$insertIndex=$i-1;
while($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
$arr[$insertIndex+1]=$arr[$insertIndex];
$insertIndex--;
}
$arr[$insertIndex+1]=$insertVal;
}
return $arr;
}4.快速排序
选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
function quickSort(&$arr) {
//先判断是否需要继续进行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//选择第一个元素作为基准
$base_num = $arr[0];
//遍历除了标尺外的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left_array = array(); //小于基准的
$right_array = array(); //大于基准的
for($i=1; $i<$length; $i++) {
if($base_num > $arr[$i]) {
//放入左边数组
$left_array[] = $arr[$i];
} else {
//放入右边
$right_array[] = $arr[$i];
}
}
//再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数
$left_array = quickSort($left_array);
$right_array = quickSort($right_array);
//合并
return array_merge($left_array, array($base_num), $right_array);
}5.交换排序
交换排序思想:就是根据数组中两个值的比较结果来对换这两个值在序列中的位置,交换排序的特点是:将值较大的向数组的尾部移动,较小的值向数组的前部移动。
function exchangeSort($arr){
$len = count($arr);//获取数组长度
for ($i = 0;$i < $len - 1; $i++) {
for ($j = $i + 1; $j < $len; $j++) {
if ($arr[$j] < $arr[$i]) {
$iTemp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $iTemp;
}
}
}
return $arr;
}边栏推荐
- Go language foundation ------ 14 ------ gotest
- 技术干货|AI框架动静态图统一的思考
- TypeScript let与var的区别
- Segment read
- Technical dry goods | reproduce iccv2021 best paper swing transformer with Shengsi mindspire
- 华为交换机基础配置(telnet/ssh登录)
- IndexSort
- Inverted chain disk storage in Lucene (pfordelta)
- 【MySQL 13】安装MySQL后第一次修改密码,可以可跳过MySQL密码验证进行登录
- 【MySQL 14】使用DBeaver工具远程备份及恢复MySQL数据库(Linux 环境)
猜你喜欢

PAT甲级 1028 List Sorting

HCIA notes

Partage de l'expérience du projet: mise en œuvre d'un pass optimisé pour la fusion IR de la couche mindstore

技术干货|关于AI Architecture未来的一些思考

【LeetCode】3. Merge Two Sorted Lists·合并两个有序链表

Technical dry goods Shengsi mindspire operator parallel + heterogeneous parallel, enabling 32 card training 242 billion parameter model

技术干货|AI框架动静态图统一的思考

Introduction of buffer flow

Go language foundation ------ 12 ------ JSON

項目經驗分享:實現一個昇思MindSpore 圖層 IR 融合優化 pass
随机推荐
Iterm2设置
EtherCAT state machine transition (ESM)
An overview of IfM Engage
Technical dry goods | alphafold/ rosettafold open source reproduction (2) - alphafold process analysis and training Construction
PAT甲级 1031 Hello World for U
技术干货|AI框架动静态图统一的思考
Go language foundation ----- 19 ----- context usage principle, interface, derived context (the multiplexing of select can be better understood here)
Mail sending of vertx
Go language foundation ----- 10 ----- string related operations (operation function, string conversion)
GoLang之结构体
【LeetCode】4. Best Time to Buy and Sell Stock·股票买卖最佳时机
PAT甲级 1027 Colors in Mars
Why is data service the direction of the next generation data center?
Project experience sharing: Based on mindspore, the acoustic model is realized by using dfcnn and CTC loss function
Technical dry goods Shengsi mindspire operator parallel + heterogeneous parallel, enabling 32 card training 242 billion parameter model
[coppeliasim4.3] C calls UR5 in the remoteapi control scenario
Application of pigeon nest principle in Lucene minshouldmatchsumscorer
【开发笔记】基于机智云4G转接板GC211的设备上云APP控制
PAT甲级 1030 Travel Plan
【MySQL 14】使用DBeaver工具远程备份及恢复MySQL数据库(Linux 环境)