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

    原理:

    首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 
    再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 
    重复第二步,直到所有元素均排序完毕。 

    思路:

    通过 n - i 次关键字间的比较,从 n - i + 1 个记录中选出关键字最小的记录,并和第 i (1 <= i <= n) 个记录交换,执行n-1趟 后就完成了记录序列的排序。

    代码:<?php 

    $arr=array(50,2,45,12,46,47,23,40,15,60,39,67,80,34); 
      //调用排序方法 
    echo "<pre>"; 
    print_r(select_sort($arr));


    function select_sort($arr) {
    //实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
    //$i 当前最小值的位置, 需要参与比较的元素
    for($i=0, $len=count($arr); $i<$len-1; $i++){

    //先假设最小的值的位置

    $p = $i;

    //$j 当前都需要和哪些元素比较,$i 后边的。

    for($j=$i+1; $j<$len; $j++){

    //$arr[$p] 是 当前已知的最小值

    if($arr[$p] > $arr[$j]){

    //比较,发现更小的,记录下最小值的位置;并且在下次比较时,
    // 应该采用已知的最小值进行比较。
    $p = $j;
    }
    }
    //已经确定了当前的最小值的位置,保存到$p中。
    //如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
    if($p != $i){
    $tmp = $arr[$p];
    $arr[$p] = $arr[$i];
    $arr[$i] = $tmp; 


    //返回最终结果
    return $arr; 

     输出: 

    Array
    (
        [0] => 2
        [1] => 12
        [2] => 15
        [3] => 23
        [4] => 34
        [5] => 39
        [6] => 40
        [7] => 45
        [8] => 46
        [9] => 47
        [10] => 50
        [11] => 60
        [12] => 67
        [13] => 80
    )
    

      

      

  • 相关阅读:
    3. Longest Substring Without Repeating Characters
    2. Add Two Numbers
    Concurrent Programming(5)
    Concurrent Programming(4)
    Concurrent Programming(3)
    Concurrent Programming(2)
    Concurrent Programming(1)
    Lua用table模拟二维数组
    C#深入研究ArrayList动态数组自动扩容原理
    ==与Equals的作用
  • 原文地址:https://www.cnblogs.com/1500418882qqcom/p/10539145.html
Copyright © 2011-2022 走看看