二、选择排序

原理: 在一列数字中,选出最小数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。(以下都是升序排列,即从小到大排列)

举例说明: $arr = array(6, 3, 8, 2, 9, 1);

第一轮:

第一次比较, 第一个数 6 与(3, 8, 2, 9, 1)中 3 比较,6大,当前最小数为3,位置为 1

第二次比较, 最小数字 3 与(3, 8, 2, 9, 1)中 8 比较,3小,当前最小数为3,位置为 1

第三次比较, 最小数字 3 与(3, 8, 2, 9, 1)中 2 比较,3大,当前最小数为2,位置为 3

第四次比较, 最小数字 2 与(3, 8, 2, 9, 1)中 9 比较,2小,当前最小数为2,位置为 3

第五次比较, 最小数字 2 与(3, 8, 2, 9, 1)中 1 比较,2大,当前最小数为1,位置为 5

第一轮比较完成后,确定最小数为1,小于第一个数6,交换位置上的数,交换后结果为 1 3 8 2 9 6

总结:第一轮比较,可以确定第一个位置的最小值。

第二轮:

第一次比较, 3与(8, 2, 9, 6)中 8 比较,3小,当前最小数为3,位置为 1

第二次比较, 3与(8, 2, 9, 6)中 2 比较,3大,当前最小数为2,位置为 3

第三次比较, 2与(8, 2, 9, 6)中 9 比较,2小,当前最小数为2,位置为 3

第四次比较, 2与(8, 2, 9, 6)中 6 比较,2小,当前最小数为2,位置为 3

第二轮比较完成后,确定最小数为2,小于第二个数3,交换位置上的数,交换后结果为 1 2 8 3 9 6

总结:第二轮比较,可以确定第二个位置的最小值。至此确定了前两个位置上的数。

第三轮:

第一次比较, 8与( 3, 9, 6)中 3 比较,8大,当前最小数为3,位置为3

第二次比较, 3与( 3, 9, 6)中 9 比较,3小,当前最小数为3,位置为3

第三次比较, 6与( 3, 9, 6)中 6 比较,3小,当前最小数为3,位置为3

第三轮比较完成后,确定最小数为3,小于第三个数8,交换位置上的数,交换后结果为 1 2 3 8 9 6

总结:第三轮比较,可以确定第三个位置的最小值。至此确定了前三个位置上的数。

第四轮:

第一次比较, 8与( 9, 6)中 9 比较,8小,当前最小数为8,位置为3

第二次比较, 8与( 9, 6)中 6 比较,8大,当前最小数为6,位置为5

第四轮比较完成后,确定最小数为6,小于第四个数8交换位置上的数,交换后结果为 1 2 3 6 9 8

总结:第四轮比较,可以确定第四个个位置的最小值。至此确定了前四个位置上的数。

第五轮:

第一次比较, 9与 8 比较,9大,当前最小数为8,位置为5

第五轮比较完成后,确定最小数为8,小于第五个数9,交换位置上的数,交换后结果为 1 2 3 6 8 9

总结:第五轮比较,可以确定第五个个位置的最小值。至此确定了前5个位置上的数。

综合以上五轮比较,每一轮比较都可以确定一个位置,对于N个数,比较N-1轮可以确定N个位置上的数,因为确定了N-1个位置,最后一个位置也就确定了。

示例代码:

选择排序 实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数

for ($i=0; $i < count($arr)-1; $i++) { //$i 当前最小值的位置, 需要参与比较的元素

$p = $i;//先假设最小的值的位置

for ($j=$i+1; $j < count($arr); $j++) { //$j 当前都需要和哪些元素比较,$i 后边的。

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

{

$p = $j;

}

}

if($p != $i)

{

$tmp = $arr[$p];

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

$arr[$i] = $tmp;

}

}

var_dump($arr);

php选择排序算法原理_PHP排序算法之选择排序相关推荐

  1. 神经网络算法原理图解,神经网络算法原理图集

    神经网络算法原理 一共有四种算法及原理,如下所示:1.自适应谐振理论(ART)网络自适应谐振理论(ART)网络具有不同的方案.一个ART-1网络含有两层一个输入层和一个输出层. 这两层完全互连,该连接 ...

  2. RF(随机森林)算法原理及其派生算法

    1.前言 集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合.本文就对集成学习中Ba ...

  3. 海外某音x-gorgon算法原理分析及算法源码公布

    算法源码见附件 分享一个去年逆的一个海外版某音 1474版本 x-gorgon算法,这里简单介绍一下算法原理,首先malloc出来一个0x1A大小的空间,然后截取用户传入的byte数组中的参数,截取开 ...

  4. 模糊神经网络算法原理,模糊神经网络算法代码

    用matlab做模糊神经网络,步骤是什么? 我知道模糊控制包括:模糊化,模糊推理,清晰化等步骤 20 谷歌人工智能写作项目:神经网络伪原创 求matlab大神帮帮忙,做模糊神经网络预测 用matlab ...

  5. 轮盘赌算法原理(ACO算法概率选择方法)

    蚁群算法作为一种启发式算法,在进行路径选择的过程中,当选择下一目标时,通过轮盘赌概率选择的方式完成,这也保证了每次循环都能随机的命中概率较大的目标.其算法思路如下: 设P(i),其中i=1..n, ...

  6. 人工神经网络的算法原理,深度神经网络算法原理

    1.人工智能的工作原理是什么? 人工智能的工作原理是:计算机会通过传感器(或人工输入的方式)来收集关于某个情景的事实.计算机将此信息与已存储的信息进行比较,以确定它的含义.计算机会根据收集来的信息计算 ...

  7. C++ 十大经典排序算法原理及模板之STL方法实现以及稳定性分析

    写在前面: 1.本文中默认排序为升序,降序的原理类似. 2.如果程序直接复制到vs出现无法识别标记的问题,解决方法在这:vs无法识别标记的解决方法 3.本文的算法都是自己用stl实现的,疏漏之处还请指 ...

  8. python选择排序从大到小_Python实现选择排序

    一.选择排序简介 选择排序(Selection sort)是一种简单直观的排序算法.选择排序首先从待排序列表中找到最小(大)的元素,存放到元素列表的起始位置(与起始位置进行交换),作为已排序序列,第一 ...

  9. 【基础机器学习算法原理与实现】使用感知器算法LDA、最小二乘法LSM、Fisher线性判别分析与KNN算法实现鸢尾花数据集的二分类问题

    本文设计并实现了PerceptronLA.PseudoIA.LeastSM.LinearDA.KNN等五个算法类,以及DataProcessor的数据处理类.对感知器算法LDA.最小二乘法LSM的伪逆 ...

最新文章

  1. swift如何打印对象的地址
  2. Go语言实战 : API服务器 (8) 中间件
  3. 编程军规 —— Java 篇
  4. 合成未来宝宝照片_父母照片重叠是宝宝长相?关晓彤鹿晗颜值逆天,邓超孙俪……...
  5. 全国计算机等级考试二级-公共基础知识
  6. 网站页面底端“本站已经安全运行XX年XX天XX秒“代码
  7. 常用元器件使用方法4:一种Micro-SIM卡连接器的使用方法
  8. 5.1.2全景声音箱摆位_杜比全景声7.1.2和7.1.4音箱摆位有什么区别
  9. 混淆电路(Garbled Circuit)
  10. 笑声的音效素材,几百个你想要的都在这
  11. 六级听力技巧与备考策略
  12. 骚男的计算机音乐,lol骚男战歌bgm_lol骚男战歌背景音乐汇总_快吧游戏
  13. 人脸识别中的活体检测算法综述
  14. Linux系统网速测速,Linux系统下的网络带宽测速
  15. 2021-11-2记一次win7下python两种版本的完全安装
  16. java怎么提升编程能力_怎样提升java编程能力
  17. android 自定义悬浮框,Android自定义悬浮窗
  18. 狂神说 SpringBoot笔记
  19. 【计算机组成原理】CPU的前世今生
  20. AutoCAD2014与致命的错误与独显直连

热门文章

  1. docker迁移与备份
  2. 三维数据平滑处理_你该如何正确的处理思看科技三维扫描仪得到的数据?
  3. STM32 之十六 深入了解 ADC 工作原理及参考电压变动的影响
  4. python3spark文本分类_如何用Spark深度集成Tensorflow实现文本分类?
  5. python 单元测试_Python系列之单元测试框架【unittest】
  6. Java / 关键字
  7. java EF6,EF Core 2.0和EF6(Entity Framework 6)中配置实体映射关系
  8. python网络爬虫实战 吕文翔_实战Python网络爬虫
  9. c++输出小数点后几位_2.1 怎么在屏幕上输出各种类型的数据
  10. 从网页中读取数据 python_数据分析硬核技能:用 Python 爬取网页