0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

php版冒泡排序是如何实现的?

汽车电子技术 来源: 程序猿零壹 作者:程序猿零壹 2023-01-20 10:39 次阅读

你好, 我是程序猿零壹。

无论学习哪一种编程语言,进行算法方面的训练时都绕不开“排序”。排序在进阶编程中有非常广泛的应用,要想成为编程高手,排序算法是必须要掌握的。而冒泡排序算法作为一种交换排序算法,可以说是最简单的排序算法之一,比较容易理解和实现。今天我们就一起来了解一下如何使用php来实现冒泡排序算法吧。

冒泡排序算法

冒泡排序算法,是一种计算机科学领域里比较简单的排序算法。它需要重复的走访过要排序的数列,依次比较两个相邻的元素,如果顺序错误就进行交换,一直到没有相邻元素需要交换,即排序完成。

这个算法的名字由来是因为越小的元素经过交换之后,会慢慢的浮到数列的顶端,就像碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

原理

  1. 比较相邻的两个元素,如果第一个比第二个大,就交换他们两个;
  2. 对每一对相邻的元素做同样的动作,从开始的第一对到队尾的最后一对。在这一点,最后的元素应该是最大的数;
  3. 针对所有元素重复以上的动作,除了最后一个;
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要交换;

排序过程

假如需要对给定的无序数组进行排序。

图片

第一轮排序

第一次排序,将指针放在队首位置,即9的位置,并与7进行比较,9比7大,所以9跟7交换位置。

图片

第二次排序,将指针往后移动,置于9的位置,并与1进行比较,9比1大,所以9跟1交换位置。

图片

第三次排序,将指针往后移动,置于9的位置,并与3进行比较,9比3大,所以9跟3交换位置。

图片

第四次排序,将指针往后移动,置于9的位置,并与2进行比较,9比2大,所以9跟2交换位置。

图片

到此,9已经处于队尾的位置,不需要再继续参与排序了,第一轮排序结束。

第二轮排序

第一次排序,将指针置于队首的位置,即7的位置,并与1进行比较,7比1大,所以7跟1交换位置。

图片

第二次排序,将指针往后移动,置于7的位置,并与3进行比较,7比3大,所以7跟3交换位置。

图片

第三次排序,将指针往后移动,置于7的位置,并与2进行比较,7比2大,所以7跟2交换位置。

图片

到此,7已经排好序,不需要再参与排序了,第二轮排序结束。

第三轮排序

第一次排序,将指针置于队首的位置,即1的位置,并与3进行比较,1比3小,所以1跟3不用交换位置。

图片

第二次排序,将指针往后移动,置于3的位置,并与2进行比较,3比2大,所以3跟2交换位置。

图片

到此,3已经排好序,不需要再参与排序了,第三轮排序结束。

第四轮排序

第一次排序,将指针置于队首的位置,即1的位置,并与2进行比较,1比2小,所以1跟2不用交换位置。

图片

到此,1跟2已经排好序,排序结束。

代码实现

function bubbleSort($array){
    $count = count($array);
    for ($i=0;$i<$count - 1;$i++){
        $isChange = false;
        for ($j=0;$j<$count-$i-1;$j++) {
            if($array[$j] > $array[$j+1]) {
                $t = $array[$j];
                $array[$j] = $array[$j+1];
                $array[$j+1] = $t;
                $isChange = true;
            }
        }
        if(!$isChange) {
            break;
        }
    }
    return $array;
}

上面代码利用了双循环来实现排序。外循环用来控制所有轮次,内循环用来控制每一轮的排序。那上面的代码有没有可以优化的地方呢?我们来思考一个问题,假如所有数列都是有序的,那么第一轮第一次排序之后所有数列没有发生一次交换,这时候其实已经可以不用再继续后面的循环了,这样可以减少循环的次数。

我们可以做个小小的改动,在一轮排序之后,如果没有发生任何交换,即表明整个数列有序。

改动后的代码如下:

function bubbleSort($array){
    $count = count($array);
    for ($i=0;$i<$count - 1;$i++){
        $isChange = false;
        for ($j=0;$j<$count-$i-1;$j++) {
            if($array[$j] > $array[$j+1]) {
                $t = $array[$j];
                $array[$j] = $array[$j+1];
                $array[$j+1] = $t;
                $isChange = true;
            }
        }
        if(!$isChange) {
            break;
        }
    }
    return $array;
}

以上就是今天所有的内容了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1938

    浏览量

    34593
  • PHP
    PHP
    +关注

    关注

    0

    文章

    452

    浏览量

    26645
  • 排序算法
    +关注

    关注

    0

    文章

    52

    浏览量

    10051
收藏 人收藏

    评论

    相关推荐

    FPGA排序-冒泡排序介绍

    排序算法是图像处理中经常使用一种算法,常见的排序算法有插入排序、希尔排序、选择排序冒泡
    发表于 07-17 10:12 1061次阅读
    FPGA<b class='flag-5'>排序</b>-<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>介绍

    labview 版的冒泡排序

    labview 版的冒泡排序,只是想用Labview表达冒泡法的思想,
    发表于 06-05 11:18

    小鸟求助冒泡排序

    小鸟刚开始学labview,昨天在公司突然想起C语言里的冒泡排序,想用labVIEW来实现,但是做不出来。有没有高手能帮忙写个当例子学习下。说明下和C语言里一样用数组做。小鸟在这里谢过了。
    发表于 01-09 21:54

    冒泡排序

    package algorithms// 冒泡排序// 冒泡排序算法的运作如下:// 比较相邻的元素。如果第一个比第二个大,就交换他们两个。// 对每一对相邻元素作同样的工作,从开始第
    发表于 10-17 19:03

    冒泡排序法三部曲の一、冒泡排序原理版

    的bubble sort(冒泡排序)原理类似于气泡上升过程,到自身的密度小于上一层介质则上升,排序同理。以数组{5,4,3,2,1}为例: 第一轮:由于5大于4,则5右移一位,5大于3,则继续右移,5>2
    发表于 09-12 10:30

    冒泡排序法三部曲の冒泡排序原理版(一)

    [table][tr][td]声明:编译环境为VS2017 语言:C language针对对象:对n个数从小到大进行排序(从大到小同理)思路分析:经典的bubble sort(冒泡排序)原理类似于
    发表于 09-12 10:42

    Java冒泡排序的原理是什么?

    Java冒泡排序的原理
    发表于 11-06 07:12

    冒泡排序法的具体实现方法是什么?

    什么是冒泡排序冒泡排序法的具体实现方法是什么?
    发表于 07-15 06:48

    冒泡排序法的泛型实现

    冒泡排序法的泛型实现,自用笔记!
    发表于 01-20 07:22

    一文了解冒泡排序

    冒泡排序是一种交换排序。 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交
    的头像 发表于 01-17 12:47 3014次阅读
    一文了解<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>

    揭秘冒泡排序、交换排序和插入排序

    01 — 冒泡排序实现冒泡排序代码之前我们先理解一下什么是冒泡
    的头像 发表于 06-18 09:57 1525次阅读

    C语言冒泡排序工程代码汇总

    C语言冒泡排序工程代码汇总
    发表于 08-30 11:06 3次下载

    冒泡排序的基本思想

    冒泡排序的英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数
    的头像 发表于 01-20 11:38 5780次阅读
    <b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>的基本思想

    怎样运用Java实现冒泡排序和Arrays排序出来

    在数据结构中我们学习了解了冒泡排序和Arrays排序的基本算法,但没能够用编程语言实现出来。那我们应该怎样运用Java通过编程语言将冒泡
    的头像 发表于 03-02 09:37 487次阅读
    怎样运用Java<b class='flag-5'>实现</b><b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>和Arrays<b class='flag-5'>排序</b>出来

    jwt冒泡排序的原理

    jwt简介 冒泡排序: (Bubble Sort)是一种简单的交换排序。之所以叫做冒泡排序,因为我们可以把每个元素当成一个小气泡,根据气泡大
    的头像 发表于 09-25 16:33 512次阅读
    jwt<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>的原理