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

  举例说明: $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个位置,最后一个位置也就确定了。代码如下:

 
<?php

     function order($arr){
//定义中间变量
$temp = 0;
$count = count($arr);
for($i=0; $i<$count-1; $i++){
//定义最小位置
$minIndex = $i;
for($j= $i+1; $j<$count; $j++){
if($arr[$j] < $arr[$minIndex]){
$minIndex = $j;
}
}
if($i != $minIndex){
$temp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp; }
}
return $arr; }
$arr = array(6, 3, 8, 2, 9, 1);
$res = order($arr);
var_dump($res );
 

php四排序-选择排序的更多相关文章

  1. 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)

    跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...

  2. java实现几种常用排序:选择排序

    一.选择排序介绍 选择排序,顾名思义就是用逐个选择的方式来进行排序,逐个选择出数组中的最大(或最小)的元素,直到选择至最后一个元素.此时数组完成了排序. 二.选择排序原理分析 三.选择排序代码实现 / ...

  3. 排序--选择排序Selection Sort Java实现

    基本原理 选择排序的简单原理:选择排序算法通过从未排序部分重复查找最小元素(考虑升序)并将其放在开头来对数组进行排序. 将数组两个子数组: 已排序子数组 未排序子数组 选择排序中每次循环都会从未排序子 ...

  4. JAVA排序--[选择排序]

    package com.array; public class Sort_Select { /** * 项目名称:选择排序 ; * 项目要求:用JAVA对数组进行排序,并运用选择排序算法; * 作者: ...

  5. 排序 选择排序&&堆排序

    选择排序&&堆排序 1.选择排序: 介绍:选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始 ...

  6. C-冒泡排序,选择排序,数组

    ——构造类型 ->数组      ->一维数组      ->相同类型的一组数据      ->类型修饰符--数组名—[数组的元素个数(必须是整型表达式或者是整型常量,不能是变 ...

  7. java实现 排序算法(鸡尾酒排序&选择排序&插入排序&二分插入排序)

    1.鸡尾酒排序算法 源程序代码: package com.SuanFa; public class Cocktial {    public static void main(String[] arg ...

  8. 内部排序->选择排序->堆排序

    文字描述 堆排序中,待排序数据同样可以用完全二叉树表示, 完全二叉树的所有非终端结点的值均不大于(或小于)其左.右孩子结点的值.由此,若序列{k1, k2, …, kn}是堆,则堆顶元素(或完全二叉树 ...

  9. 内部排序->选择排序->树形选择排序

    文字描述 树形选择排序又称锦标赛排序; 比如,在8个运动员中决出前3名至多需要11场比赛, 而不是7+6+5=18场比赛(它的前提是甲胜乙,乙胜丙,则甲必能胜丙) 首先对n个记录的关键字进行两两比较, ...

  10. 内部排序->选择排序->简单选择排序

    文字描述 简单排序的基本思想是:每一趟在n-i+1(i=1,2,…,n)个记录中选取关键字最小的记录作为有序列表中的第i个记录. 示意图 略 算法分析 简单排序算法中,所需进行记录移动的操作次数较少, ...

随机推荐

  1. nginx静态文件缓存的解决方案

    nginx的一大功能就是完成静态资源的分离部署,减轻后端服务器的压力,如果给这些静态资源再加一级nginx的缓存,可以进一步提升访问效率. 第一步:添加nginx.conf的http级别的缓存配置 # ...

  2. Python2.7-pickle, cpickle

    pickle, cpickle模块,用于序列化和反序列化 python 对象数据,可以被序列化的有:布尔值,数值,字符串,包含以上三类的容器,定义在模块顶层的函数.内置函数和类,实例对象的 __dic ...

  3. Docker学习5-Services – 服务(未完待续)

    扩展应用程序并启用负载平衡, 为此,必须在分布式应用程序的层次结构中提升一级:服务.在分布式应用程序中,应用程序的不同部分称为“服务”.例如,一个视频共享站点,它可能包含用于将应用程序数据存储在数据库 ...

  4. JAVA 对基础知识的加强

    一.我们在写类的时候.设置字段的时候含义: 简单的javabean类: package jd.com.vo; import jd.com.mybaitstest.account; public cla ...

  5. POJ1127 Jack Straws

    给你一些线段,求出哪些线段是相连的,哪些是不相连的.相连包括间接相连,即这两条线段本身不直接相连,而是通过其它线段的连接而间接相连. 线段相交+并查集 这里主要说如何判断线段相交:快速排斥试验+跨立试 ...

  6. 使用Novell.Directory.Ldap.NETStandard在.NET Core中验证AD域账号

    Novell.Directory.Ldap.NETStandard是一个在.NET Core中,既支持Windows平台,又支持Linux平台,进行Windows AD域操作的Nuget包. 首先我们 ...

  7. linux_vim

    今天稍微学习以下vim 学习的一些课件: 1. 2. 3. 4. 5.

  8. 20155338《网络对抗》Exp3 免杀原理与实践

    20155338<网络对抗>Exp3 免杀原理与实践 实验过程 一.免杀效果参考基准 Kali使用上次实验msfvenom产生后门的可执行文件,上传到老师提供的网址http://www.v ...

  9. WPF编程,窗体最大化、最小化、关闭按钮功能的禁用

    原文:WPF编程,窗体最大化.最小化.关闭按钮功能的禁用 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/detail ...

  10. 路遥眼里的河南人<平凡的世界>

    路遥,一个作过农民,当过小学教师,用平凡的生命,却写出不平凡的小说<平凡的世界>,他喜欢夜的宁静,喜欢在夜里思考,他说只有在夜里我们才是最真实的自己.所以他喜欢在夜里创作,这部小说也是在这 ...