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

  举例说明: $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. leetcode349—Intersection of Two Arrays

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  2. C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求

    C# HttpWebRequest GET HTTP HTTPS 请求  作者:周公(zhoufoxcn)    原文:http://blog.csdn.net/zhoufoxcn 这个需求来自于我最 ...

  3. 【SQL】MaxComputer常用SQL与注意小结

    MaxComputer常用SQL 1.建表 CREATE TABLE dwd_tfc_ctl_signal_phasedir ( cust_inter_id STRING COMMENT '客户路口I ...

  4. java 锁白话

    一.锁 1.可见性: 定义:数据对所有线程可见 原因:cpu操作数据时会把数据读取到内存中去,可以理解为值做了备份,但是备份数据和原始数据在后续操作中不一定一致 实现:java使用volite关键字来 ...

  5. controlfile 备份到trace文件例子

    主要是为了学习oracle的克隆.参考: http://www.dba-oracle.com/oracle_tips_db_copy.htm 执行: SQL>alter database bac ...

  6. Python的进制等转换

    To 十进制 二进制: >>> int('110', 2) -> 6 八进制: >>> int('10', 8) -> 8 十六进制: >> ...

  7. VS新建一个模板工程

    新建一个模板工程的好处:    1.就不用每次都走一边新建向导了,新建工程一步到位. 2.可以往项目中每次都的输入的代码,如一些声明注释-- 效果图: 具体步骤: 1.自己先新建一个属于自己的工程. ...

  8. MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”

    问题 MSBUILD : error MSB3428: 未能加载 Visual C++ 组件"VCBuild.exe".要解决此问题,1) 安装 .NET Framework 2. ...

  9. Flutter - 快速创建Stateless和Stateful组件

    1. 快速创建Stateless组件 输入stle,回车 class extends StatelessWidget { @override Widget build(BuildContext con ...

  10. Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法

    Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...