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) 

  • 相关阅读:
    python之使用openpyxl从excel读取测试数据004
    python之编写HttpRequest工具类003
    python之cookies获取002
    OJ练习9——T20 valid parentheses
    OJ练习8——T19 remove nth node
    OJ练习7——T14 Longest Common Prefix
    OJ练习6——T8
    OJ练习5——T6
    OJ练习4——T7
    九度OJ-1351
  • 原文地址:https://www.cnblogs.com/hangtt/p/6427152.html
Copyright © 2011-2022 走看看