zoukankan      html  css  js  c++  java
  • 十大排序算法之冒泡排序(1)

    1. 冒泡排序

    <?php
    
    /**
     * 原始冒泡排序
     */
    function bubbleSort($sortData)
    {
        $count = count($sortData);
        $sortCount = 0;
        
        for ($i = 0; $i < $count - 1; $i++) {
            for ($j = 0; $j < $count - $i - 1; $j++) {
                $sortCount++;
                if ($sortData[$j] > $sortData[$j + 1]) {
                    $temp = $sortData[$j];
                    $sortData[$j] = $sortData[$j + 1];
                    $sortData[$j + 1] = $temp;
                }
            }
        }
        
        echo 'bubbleSort Count:' . $sortCount;
        echo PHP_EOL;
        return $sortData;
    }
    
    /**
     * 改进1:使用标识符标记某次循环是否交换了,没交换则直接终止(全部有序)
     * 
     */
    function bubbleSort_2($sortData){
        $count = count($sortData);
        $sortCount = 0;
     
        $isChanged = true;
        for ($i = 0; $i < $count - 1 && $isChanged; $i++) {
            $isChanged = false;
            for ($j = 0; $j < $count - $i - 1; $j++) {
                $sortCount++;
                if ($sortData[$j] > $sortData[$j + 1]) {
                    $temp = $sortData[$j];
                    $sortData[$j] = $sortData[$j + 1];
                    $sortData[$j + 1] = $temp;
                    $isChanged = true;
                }
            }
        }
    
        echo 'bubbleSort_2 Count:' . $sortCount;
        echo PHP_EOL;
        return $sortData;
    }
    
    /**
     * 改进2:记录最后一次更改的位置,之后的不再进行比较(局部有序)
     * 
     */
    function bubbleSort_3($sortData){
        $count = count($sortData);
        $sortCount = 0;
     
        $isChanged = true;
        $lastCount = $count - 1;
        for ($i = 0; $i < $lastCount && $isChanged; $i++) {
            $isChanged = false;
            for ($j = 0; $j < $lastCount - $i; $j++) {
                $sortCount++;
                $lastSort = $lastCount;
                if ($sortData[$j] > $sortData[$j + 1]) {
                    $temp = $sortData[$j];
                    $sortData[$j] = $sortData[$j + 1];
                    $sortData[$j + 1] = $temp;
                    $isChanged = true;
                    $lastSort = $j;
                }
            }
            $lastCount = $lastSort;
        }
    
        echo 'bubbleSort_3 Count:' . $sortCount;
        echo PHP_EOL;
        return $sortData;
    }
    
    /**
     * 改进3:双向排序,从前往后记录最后一次排序的位置post1,从后往前记录最后一次排序的位置post2
     * 当post2 > post1的时候说明完成了
     */
    function bubbleSort_4($sortData){
        $count = count($sortData);
        $post1 = $count-1;
        $post2 = 0;
        $index = 0;
        $sortCount = 0;
        while($post1 > $post2){
            for($i = $post2; $i < $post1; $i++){
                $sortCount++;
                if ($sortData[$i] >  $sortData[$i + 1]) {
                    $temp = $sortData[$i];
                    $sortData[$i] = $sortData[$i + 1];
                    $sortData[$i + 1] = $temp;
                    $index = $i;
                }
            }
            $post1 = $index;
            
             for($j = $post1; $j > $post2; $j--){
                 if($sortData[$j - 1] > $sortData[$j]){
                    $sortCount++;
                    $temp = $sortData[$j];
                    $sortData[$j] = $sortData[$j - 1];
                    $sortData[$j - 1] = $temp;
                    $index = $j; 
                 }
            }
            $post2 = $index;
        }
    
        echo 'bubbleSort_4 Count:' . $sortCount;
        echo PHP_EOL;
        return $sortData;
    }
    
    $testSortData = [3, 2, 9, 234, 3432, 43, 22, 33, 21312, 123];
    
    $sortResult = bubbleSort($testSortData);
    echo 'bubbleSort Result:';
    echo PHP_EOL;
    echo(implode(',', $sortResult));
    echo PHP_EOL;
    
    $sortResult = bubbleSort_2($testSortData);
    echo 'bubbleSort_2 Result:';
    echo PHP_EOL;
    echo(implode(',', $sortResult));
    
    $sortResult = bubbleSort_3($testSortData);
    echo 'bubbleSort_3 Result:';
    echo PHP_EOL;
    echo(implode(',', $sortResult));
    
    $sortResult = bubbleSort_4($testSortData);
    echo 'bubbleSort Result:';
    echo PHP_EOL;
    echo(implode(',', $sortResult));
    echo PHP_EOL;
    

  • 相关阅读:
    nuxt项目打包上线,以及nuxt项目基础代码分享
    SVG学习之stroke-dasharray 和 stroke-dashoffset 详解
    从零开始使用mocha测试
    小程序开发,视频播放和下载
    小程序开发中遇到的坑
    记录一次面试中的HTTP请求相关问题
    css3 min-content,max-content,fit-content, fill属性
    GC的 算法和种类
    JVM 的运行机制
    各种同步控制工具的使用
  • 原文地址:https://www.cnblogs.com/qiye5757/p/14326972.html
Copyright © 2011-2022 走看看