91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

    文章

    1956

    瀏覽量

    36628
  • PHP
    PHP
    +關注

    關注

    0

    文章

    454

    瀏覽量

    27526
  • 排序算法
    +關注

    關注

    0

    文章

    53

    瀏覽量

    10247
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FPGA排序-冒泡排序介紹

    排序算法是圖像處理中經常使用一種算法,常見的排序算法有插入排序、希爾排序、選擇排序冒泡
    發表于 07-17 10:12 ?1348次閱讀
    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 ?3256次閱讀
    一文了解<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>

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

    01 — 冒泡排序實現冒泡排序代碼之前我們先理解一下什么是冒泡
    的頭像 發表于 06-18 09:57 ?1808次閱讀

    C語言冒泡排序工程代碼匯總

    C語言冒泡排序工程代碼匯總
    發表于 08-30 11:06 ?3次下載

    冒泡排序的基本思想

    冒泡排序的英文Bubble Sort,是一種最基礎的交換排序。之所以叫做冒泡排序,因為每一個元素都可以像小氣泡一樣,根據自身大小一點一點向數
    的頭像 發表于 01-20 11:38 ?6281次閱讀
    <b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>的基本思想

    怎樣運用Java實現冒泡排序和Arrays排序出來

    在數據結構中我們學習了解了冒泡排序和Arrays排序的基本算法,但沒能夠用編程語言實現出來。那我們應該怎樣運用Java通過編程語言將冒泡
    的頭像 發表于 03-02 09:37 ?713次閱讀
    怎樣運用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 ?774次閱讀
    jwt<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>的原理
    主站蜘蛛池模板: 亚洲黄色小说网站 | 欧美一级特黄aa大片 | 污污视频网址 | 日本一区免费看 | 欧美综合精品一区二区三区 | 欧美日韩国产另类一区二区三区 | 亚洲三级理论 | 天堂男人网 | 正在播放国产巨作 | 三级黄色在线视频中文 | 欧美色乱| 久久久久久国产精品免费免 | 伊人久久成人爱综合网 | 亚洲午夜在线观看 | 免费啪视频 | 亚洲高清资源 | 亚洲国产欧美精品一区二区三区 | 全免费午夜一级毛片真人 | 四虎影视在线影院4hutv | 天天看片国产 | 日本加勒比官网 | 亚洲伊人久久大香线蕉结合 | 久久亚洲国产成人影院 | 中文字幕一区二区三 | 亚洲www色 | 天天操2023 | 天天干视频在线 | 老师叫我揉她内裤越快越好 | 99视频全部免费 | 亚洲美女视频一区二区三区 | 色香视频一sxmv首页 | 国产色妞妞在线视频免费播放 | 欧美区在线播放 | 天天操天天操天天 | 天天摸天天做天天爽水多 | 猛操在线 | 国产精品9999 | 岛国毛片在线观看 | 天堂最新版资源www在线 | 一区二区三区www | 天天看天天摸色天天综合网 |