zoukankan      html  css  js  c++  java
  • 选择排序

    演示数组为:

    $a = array(9,  3,  5,  8,  2,  7);    //下标为0,1,2,3,4,5

    演算过程描述:

    求得一个数组的最大值的下标,并将这个最大值下标的单元跟最后一个单元进行交换;

    然后,继续从剩余数据中取得最大值的下标,并将这个最大值下标的单元跟剩余的最后一个单元交换

    以此类推,直到只剩下一个数据,就不用找了。

    演示:

    原始数组:

    9

    3

    5

    8

    2

    7

    第1趟后:

    7

    3

    5

    8

    2

    9

    第2趟后:

    7

    3

    5

    2

    8

    9

    第3趟后:

    2

    3

    5

    7

    8

    9

    第4趟后:

    2

    3

    5

    7

    8

    9

    第5趟后:

    2

    3

    5

    7

    8

    9

    规律描述:

    1,假设数组的数据有n个。

    2,要进行查找最大值单元并进行交换的“趟数”为n-1;

    3,每一趟都要求出“剩余数据”中的最大值单元,并且,剩余数据的数量每一趟都少1个,第一趟有n个。

    4,每一趟找出最大值单元后,都要进行交换:最大值单元,跟剩余数据中的最后一个单元交换。

    代码演示如下:

    <?php
    $a = array(9,  3,  5,  8,  2,  7);    //下标为0,1,2,3,4,5
    /*
    规律描述:
    1,假设数组的数据有n个。
    2,要进行查找最大值单元并进行交换的“趟数”为n-1;
    3,每一趟都要求出“剩余数据”中的最大值单元,并且,剩余数据的数量每一趟都少1个,第一趟有n个。
    4,每一趟找出最大值单元后,都要进行交换:最大值单元,跟剩余数据中的最后一个单元交换。
    */
    echo "<br/>排序之前:"; print_r($a);
    //一顿排序。。。。。
    $n = count($a);
    for($i = 0; $i < $n - 1; ++$i){//趟数
        //每一趟开始找其中的最大值单元:
        $max = $a[0];    //找最大值先要取得第一项的值
        $pos = 0;        //找最大值的下标,也要先取得第一项的下标
        for($k = 0; $k < $n-$i; ++$k){//注意这里和冒泡的区别:一个是比较次数一个是剩余个数!
            //这里,$k也可以理解为下标
            if($a[$k] > $max){
                $max = $a[$k];
                $pos = $k;
            }
        }
        //前面一定可以获得最大值及其所在下标:即最大值单元
        //然后开始i进行交换:
        $t = $a[$pos];    //最大值的单元
        $a[$pos] = $a[$n-$i-1];//$n-$i-1就是剩余数据中的最后一个单元的下标!
        $a[$n-$i-1] = $t;
    }
    echo "<br/>排序之后:"; print_r($a);
    ?>
  • 相关阅读:
    [Abp vNext 源码分析]
    C# 结合 PInvoke 对接 IP 摄像头的笔记
    Abp vNext 自定义 Ef Core 仓储引发异常
    [Abp vNext 源码分析]
    [Abp vNext 源码分析]
    [Abp vNext 源码分析]
    网站SEO中服务器优化的三个问题
    用香港服务器还是国内服务器好
    租用香港服务器最重要的三个问题
    如何选择服务器操作系统
  • 原文地址:https://www.cnblogs.com/healy/p/6905693.html
Copyright © 2011-2022 走看看