zoukankan      html  css  js  c++  java
  • 冒泡排序(Bubble Sort)

    常见的排序算法有Bubble Sort、Merge Sort、Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序。

    这里分享一下Buuble Sort算法,php版本的。冒泡排序不适合在待排序的数据集特别大的情况下,这里只是一个简易的demo,待排序的数据在10以内。

    冒泡排序算法有2种极端的情况所导致的算法复杂度是不一样的:

    1. 所有的数据集都是有序的,则此时通过算法优化可以是算法的复杂度从 O(n^2) 将至 O(n)
    2. 所有的数据集都是无序的,此时算法的复杂度为O(n^2)

    初学者在写冒泡排序时很少考虑,如果当数据自身就是一个有序数据集时,对此排序如果不做优化则算法的复杂度则为O(n^2)

    下面是PHP版本的2中写法:

    第一种

    function bubbleSort($arr, $n)
    {
            for ($i = 0; $i < $n - 1; $i++) {
                $swap = false;
                for ($j = 0; $j < $n - 1 - $i; $j++) {
                    if ($arr[$j] > $arr[$j + 1]) {
                        $tmp = $arr[$j];
                        $arr[$j] = $arr[$j + 1];
                        $arr[$j + 1] = $tmp;
                        $swap = true;
                    }
                }
                if ($swap == false)
                    break 1;
            }
            return $arr;
     }

    第二种

    function newBubbleSort($arr, $n)
    {
            do {
                $sorted = 1;
                --$n;
                for ($i = 0; $i < $n; $i++) {
                    if ($arr[$i] > $arr[$i + 1]) {
                        $t = $arr[$i];
                        $arr[$i] = $arr[$i + 1];
                        $arr[i + 1] = $t;
                        $sorted = 0;
                    }
                }
            } while (!$sorted);
            return $arr;
    }

    通过定义标志位来优化冒泡排序算法。

  • 相关阅读:
    常用查询mysql
    java Scanner
    存储过程
    使用IDEA打jar包
    创建一个jmeter的外部jar包
    关于jmeter
    Anaconda
    IDEA中使用IdeaVim
    爬虫之scrapy框架
    爬虫之图形验证码识别技术
  • 原文地址:https://www.cnblogs.com/stackflow/p/4346045.html
Copyright © 2011-2022 走看看