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

     1 <?php
     2 
     3 $arr=array(1,43,54,62,21,66,32,78,36,76,39);  
     4 
     5 //实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
     6 function selectSort($arr) {
     7     //$i 当前最小值的位置, 需要参与比较的元素
     8     for($i=0, $len=count($arr); $i<$len-1; $i++) {
     9         //先假设最小的值的位置
    10         $p = $i;
    11 
    12         //$j 当前都需要和哪些元素比较,$i 后边的。
    13         for($j=$i+1; $j<$len; $j++) {
    14             //$arr[$p] 是 当前已知的最小值
    15              //比较,发现更小的,记录下最小值的位置;并且在下次比较时,
    16             if($arr[$p] > $arr[$j]) {
    17                  // 应该采用已知的最小值进行比较。
    18                 $p = $j;
    19             }
    20         }
    21 
    22         //已经确定了当前的最小值的位置,保存到$p中。
    23         //如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
    24         if($p != $i) {
    25             $tmp = $arr[$p];
    26             $arr[$p] = $arr[$i];
    27             $arr[$i] = $tmp;
    28         }
    29     }
    30     
    31     //返回最终结果
    32     return $arr;
    33 }
    34 
    35 $arr = selectSort($arr);
    36 
    37 echo "<pre>";
    38 print_r($arr);
    39 
    40 
    41 
    42 
    43 /*
    44 Array
    45 (
    46     [0] => 1
    47     [1] => 21
    48     [2] => 32
    49     [3] => 36
    50     [4] => 39
    51     [5] => 43
    52     [6] => 54
    53     [7] => 62
    54     [8] => 66
    55     [9] => 76
    56     [10] => 78
    57 )
    58 */
    View Code

    该算法使用了交换操作,仅使用了一个辅助单元, 因此其算法空间复杂度为O(1)

    时间复杂度如下所示:

    T(n) = ∑i=1n-1 (n-i) = n(n-1) / 2 = O(n2) 

  • 相关阅读:
    static 关键字
    gitlab 配置到jenkins
    Eclipse下代码字体背景变红/变绿/变黄原因
    构造方法(和python初始化变量类似)
    面向对象(实际就像python跳用自己写的库那样)
    Python 的AES加密与解密
    break 和 continue 的用法
    for循环
    Eclipse快捷键
    java三元运算符
  • 原文地址:https://www.cnblogs.com/hangtt/p/6427152.html
Copyright © 2011-2022 走看看