这篇文章主要介绍了关于PHP索引数组排序方法整理,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

一、冒泡排序

1. 原理

每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面,逐次比较,直至将最大的数移到最后。最将剩下的N-1个数继续比较,将次大数移至倒数第二位。 依此规律,直至比较结束。

2. 代码/**

* 冒泡排序

* @param Array 排序数组

* @return Array 排序号的数组

*/

function bubbleSort($arr)

{

$len=count($arr);

//该层循环控制 需要冒泡的轮数

for($i=1;$i

{ //该层循环用来控制每轮 冒出一个数 需要比较的次数

for($k=0;$k

{

if($arr[$k]>$arr[$k+1])

{

$tmp=$arr[$k+1];

$arr[$k+1]=$arr[$k];

$arr[$k]=$tmp;

}

}

}

return $arr;

}

二、选择排序

1. 原理

每次在无序队列中“选择”出最小值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别)。

2. 代码/**

* 选择排序

* 功能:将索引数组(值也都为数字)按照【键=>值:最小键=>最小值】的顺序重新排列

* @param Array

* @return Array

*/

function selectSort($arr) {

//双重循环完成,外层控制轮数,内层控制比较次数

$len=count($arr);

for($i=0; $i

//先假设最小的值的位置

$p = $i;

for($j=$i+1; $j

//$arr[$p] 是当前已知的最小值

if($arr[$p] > $arr[$j]) {

//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。

$p = $j;

}

}

//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。

if($p != $i) {

$tmp = $arr[$p];

$arr[$p] = $arr[$i];

$arr[$i] = $tmp;

}

}

//返回最终结果

return $arr;

}

三、插入排序

1. 原理

始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的移动数据,空出一个适当的位置,把待插入的元素放到里面去。

2. 代码:/**

* 插入排序

* 功能:将索引数组(值也都为数字)按照【键=>值:最小键=>最小值】的顺序重新排列

* @param Array

* @return Array

*/

function insertSort($arr) {

$len=count($arr);

for($i=1; $i

$tmp = $arr[$i];

//内层循环控制,比较并插入

for($j=$i-1;$j>=0;$j--) {

if($tmp < $arr[$j]) {

//发现插入的元素要小,交换位置,将后边的元素与前面的元素互换

$arr[$j+1] = $arr[$j];

$arr[$j] = $tmp;

}

else {

//如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。

break;

}

}

}

return $arr;

}

四、快速排序/**

* 快速排序

* 功能:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的移动数据,空出一个适当的位置,把待插入的元素放到里面去。

* @param Array

* @return Array

*/

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

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);

}

相关推荐:

php 数组索引重新排序,PHP索引数组排序方法整理相关推荐

  1. 编程之美-寻找数组中的最大值和最小值方法整理

    [试题描述] 方法一:比较2N次 方法二:比较1.5N次 方法三:比较1.5N次 方法四:分治法,比较1.5N次

  2. mysql插入报主键冲突,解决方法主键索引重新排序

    mysql插入报主键冲突,解决方法主键索引重新排序 参考文章: (1)mysql插入报主键冲突,解决方法主键索引重新排序 (2)https://www.cnblogs.com/nizuimeiabc1 ...

  3. pandas中series一维数组的创建、索引的更改+索引切片和布尔索引+dataframe二维数组的创建、基本属性、索引方法(传统方法和lociloc)、nan操作、排序+案例

    目录 一.为什么要学习pandas? 二.pandas的常用数据类型 1.series--一维的且带标签的数组 (1)创建一维数组 (2)通过列表形式创建的series带标签数组可以改变索引,传入索引 ...

  4. ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法

    ThoughtWorks.QRCode 生成QR二维码时提示"索引超出了数组界限"的原因和解决方法 参考文章: (1)ThoughtWorks.QRCode 生成QR二维码时提示& ...

  5. java数组排序法方法_JAVA数组中五种常见排序方法

    前言: 几种常用的JAVA数组排序方法的整合. 法一:Arrays.sort() Arrays.sort()排序方法在java中是最简单且最常用的排序方法 int []arr1= {45,34,59, ...

  6. A01_[NumPy中文网]数组基础(创建数组,多维数组切片,数组属性)、使用数组(基本操作符,数组特殊运算符)、索引(花式索引,布尔索引,缺省索引)

    NumPy简单入门教程 NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组.它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体验在 ...

  7. python 寻找数组的中心索引_Leetcode724查找数组Python的中心索引,LeetCode724,寻找,python...

    寻找数组的中心索引 这一次打卡不知道又摸了多久的鱼,周五没做题,周日补上. 题目 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中 ...

  8. 【Python】Numpy数组的切片、索引详解:取数组的特定行列

    [Python]Numpy数组的切片.索引详解:取数组的特定行列 文章目录 [Python]Numpy数组的切片.索引详解:取数组的特定行列 1. 介绍 2. 切片索引 2.1 切片索引先验知识 2. ...

  9. Golang 数组的简单操作之合并数组与删除某个索引的值

    Golang 数组的简单操作之合并数组与删除某个索引的值 Golang轻松学习 文章目录 Golang 数组的简单操作之合并数组与删除某个索引的值 一.接口数组([]interface{})是什么? ...

最新文章

  1. DHCP服务器在企业网中的应用
  2. java 线程模型_Java基础篇之Java线程模型
  3. 一个C#写的调用外部进程类
  4. 开源监控利器grafana
  5. 图片洗牌切换动画特效
  6. c# WPF设置软件界面背景为MediaElement并播放视频
  7. bp matlab预测结果差,BP神经网络 预测 精度差
  8. 彩影2008 白金版 10.1 build 2010
  9. 智方8000系文具进销存管理系统 v11.27 bt
  10. 最近游戏更新 未整理 无图片
  11. 《查拉图斯特拉如是说》读书笔记
  12. 什么是青藤零域·微隔离安全平台?
  13. 软件工程第一次作业——制作个人简介
  14. 查看电脑是否支持蓝牙和wifi
  15. ros2上怎样才能玩rmf?
  16. 基于MPLAB X IDE配置位设置讲解
  17. hdu 5435 A serious math problem 数位dp
  18. 抽取JS语法树的基本模块
  19. jdk8-时间API
  20. 使用vue实现手写签名功能

热门文章

  1. 技巧丨哔哩哔哩转正答题技巧
  2. 博弈论——P4101 人人尽说江南好
  3. SQL高级教程实用(一)
  4. PS基础--钢笔工具_选中区域_扣除
  5. 台式电脑p键出现仅计算机,台式机如何切换投影仪
  6. 微信小程序开发之页面传参
  7. Android 输入法
  8. 想谈甜甜的恋爱时,可以用Python来绘画唯美的飘落银杏树来安抚自己
  9. 开源网络考试系统(java)
  10. 我的互联网价值观、方法论和个人实践(4)-个人信用模型