精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

php版冒泡排序是如何實(shí)現(xiàn)的?

汽車電子技術(shù) ? 來源: 程序猿零壹 ? 作者:程序猿零壹 ? 2023-01-20 10:39 ? 次閱讀

你好, 我是程序猿零壹。

無論學(xué)習(xí)哪一種編程語言,進(jìn)行算法方面的訓(xùn)練時(shí)都繞不開“排序”。排序在進(jìn)階編程中有非常廣泛的應(yīng)用,要想成為編程高手,排序算法是必須要掌握的。而冒泡排序算法作為一種交換排序算法,可以說是最簡(jiǎn)單的排序算法之一,比較容易理解和實(shí)現(xiàn)。今天我們就一起來了解一下如何使用php來實(shí)現(xiàn)冒泡排序算法吧。

冒泡排序算法

冒泡排序算法,是一種計(jì)算機(jī)科學(xué)領(lǐng)域里比較簡(jiǎn)單的排序算法。它需要重復(fù)的走訪過要排序的數(shù)列,依次比較兩個(gè)相鄰的元素,如果順序錯(cuò)誤就進(jìn)行交換,一直到?jīng)]有相鄰元素需要交換,即排序完成。

這個(gè)算法的名字由來是因?yàn)樵叫〉脑亟?jīng)過交換之后,會(huì)慢慢的浮到數(shù)列的頂端,就像碳酸飲料中二氧化碳的氣泡最終會(huì)上浮到頂端一樣,故名“冒泡排序”。

原理

  1. 比較相鄰的兩個(gè)元素,如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè);
  2. 對(duì)每一對(duì)相鄰的元素做同樣的動(dòng)作,從開始的第一對(duì)到隊(duì)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該是最大的數(shù);
  3. 針對(duì)所有元素重復(fù)以上的動(dòng)作,除了最后一個(gè);
  4. 持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要交換;

排序過程

假如需要對(duì)給定的無序數(shù)組進(jìn)行排序。

圖片

第一輪排序

第一次排序,將指針放在隊(duì)首位置,即9的位置,并與7進(jìn)行比較,9比7大,所以9跟7交換位置。

圖片

第二次排序,將指針往后移動(dòng),置于9的位置,并與1進(jìn)行比較,9比1大,所以9跟1交換位置。

圖片

第三次排序,將指針往后移動(dòng),置于9的位置,并與3進(jìn)行比較,9比3大,所以9跟3交換位置。

圖片

第四次排序,將指針往后移動(dòng),置于9的位置,并與2進(jìn)行比較,9比2大,所以9跟2交換位置。

圖片

到此,9已經(jīng)處于隊(duì)尾的位置,不需要再繼續(xù)參與排序了,第一輪排序結(jié)束。

第二輪排序

第一次排序,將指針置于隊(duì)首的位置,即7的位置,并與1進(jìn)行比較,7比1大,所以7跟1交換位置。

圖片

第二次排序,將指針往后移動(dòng),置于7的位置,并與3進(jìn)行比較,7比3大,所以7跟3交換位置。

圖片

第三次排序,將指針往后移動(dòng),置于7的位置,并與2進(jìn)行比較,7比2大,所以7跟2交換位置。

圖片

到此,7已經(jīng)排好序,不需要再參與排序了,第二輪排序結(jié)束。

第三輪排序

第一次排序,將指針置于隊(duì)首的位置,即1的位置,并與3進(jìn)行比較,1比3小,所以1跟3不用交換位置。

圖片

第二次排序,將指針往后移動(dòng),置于3的位置,并與2進(jìn)行比較,3比2大,所以3跟2交換位置。

圖片

到此,3已經(jīng)排好序,不需要再參與排序了,第三輪排序結(jié)束。

第四輪排序

第一次排序,將指針置于隊(duì)首的位置,即1的位置,并與2進(jìn)行比較,1比2小,所以1跟2不用交換位置。

圖片

到此,1跟2已經(jīng)排好序,排序結(jié)束。

代碼實(shí)現(xiàn)

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;
}

上面代碼利用了雙循環(huán)來實(shí)現(xiàn)排序。外循環(huán)用來控制所有輪次,內(nèi)循環(huán)用來控制每一輪的排序。那上面的代碼有沒有可以優(yōu)化的地方呢?我們來思考一個(gè)問題,假如所有數(shù)列都是有序的,那么第一輪第一次排序之后所有數(shù)列沒有發(fā)生一次交換,這時(shí)候其實(shí)已經(jīng)可以不用再繼續(xù)后面的循環(huán)了,這樣可以減少循環(huán)的次數(shù)。

我們可以做個(gè)小小的改動(dòng),在一輪排序之后,如果沒有發(fā)生任何交換,即表明整個(gè)數(shù)列有序。

改動(dòng)后的代碼如下:

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;
}

以上就是今天所有的內(nèi)容了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1938

    瀏覽量

    34593
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    452

    瀏覽量

    26647
  • 排序算法
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    10051
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA排序-冒泡排序介紹

    排序算法是圖像處理中經(jīng)常使用一種算法,常見的排序算法有插入排序、希爾排序、選擇排序冒泡
    發(fā)表于 07-17 10:12 ?1061次閱讀
    FPGA<b class='flag-5'>排序</b>-<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>介紹

    labview 版的冒泡排序

    labview 版的冒泡排序,只是想用Labview表達(dá)冒泡法的思想,
    發(fā)表于 06-05 11:18

    小鳥求助冒泡排序

    小鳥剛開始學(xué)labview,昨天在公司突然想起C語言里的冒泡排序,想用labVIEW來實(shí)現(xiàn),但是做不出來。有沒有高手能幫忙寫個(gè)當(dāng)例子學(xué)習(xí)下。說明下和C語言里一樣用數(shù)組做。小鳥在這里謝過了。
    發(fā)表于 01-09 21:54

    冒泡排序

    package algorithms// 冒泡排序// 冒泡排序算法的運(yùn)作如下:// 比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。// 對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第
    發(fā)表于 10-17 19:03

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

    的bubble sort(冒泡排序)原理類似于氣泡上升過程,到自身的密度小于上一層介質(zhì)則上升,排序同理。以數(shù)組{5,4,3,2,1}為例: 第一輪:由于5大于4,則5右移一位,5大于3,則繼續(xù)右移,5>2
    發(fā)表于 09-12 10:30

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

    [table][tr][td]聲明:編譯環(huán)境為VS2017 語言:C language針對(duì)對(duì)象:對(duì)n個(gè)數(shù)從小到大進(jìn)行排序(從大到小同理)思路分析:經(jīng)典的bubble sort(冒泡排序)原理類似于
    發(fā)表于 09-12 10:42

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

    Java冒泡排序的原理
    發(fā)表于 11-06 07:12

    冒泡排序法的具體實(shí)現(xiàn)方法是什么?

    什么是冒泡排序冒泡排序法的具體實(shí)現(xiàn)方法是什么?
    發(fā)表于 07-15 06:48

    冒泡排序法的泛型實(shí)現(xiàn)

    冒泡排序法的泛型實(shí)現(xiàn),自用筆記!
    發(fā)表于 01-20 07:22

    一文了解冒泡排序

    冒泡排序是一種交換排序。 什么是交換排序呢? 交換排序:兩兩比較待排序的關(guān)鍵字,并交
    的頭像 發(fā)表于 01-17 12:47 ?3014次閱讀
    一文了解<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>

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

    01 — 冒泡排序實(shí)現(xiàn)冒泡排序代碼之前我們先理解一下什么是冒泡
    的頭像 發(fā)表于 06-18 09:57 ?1527次閱讀

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

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

    冒泡排序的基本思想

    冒泡排序的英文Bubble Sort,是一種最基礎(chǔ)的交換排序。之所以叫做冒泡排序,因?yàn)槊恳粋€(gè)元素都可以像小氣泡一樣,根據(jù)自身大小一點(diǎn)一點(diǎn)向數(shù)
    的頭像 發(fā)表于 01-20 11:38 ?5787次閱讀
    <b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>的基本思想

    怎樣運(yùn)用Java實(shí)現(xiàn)冒泡排序和Arrays排序出來

    在數(shù)據(jù)結(jié)構(gòu)中我們學(xué)習(xí)了解了冒泡排序和Arrays排序的基本算法,但沒能夠用編程語言實(shí)現(xiàn)出來。那我們應(yīng)該怎樣運(yùn)用Java通過編程語言將冒泡
    的頭像 發(fā)表于 03-02 09:37 ?487次閱讀
    怎樣運(yùn)用Java<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>和Arrays<b class='flag-5'>排序</b>出來

    jwt冒泡排序的原理

    jwt簡(jiǎn)介 冒泡排序: (Bubble Sort)是一種簡(jiǎn)單的交換排序。之所以叫做冒泡排序,因?yàn)槲覀兛梢园衙總€(gè)元素當(dāng)成一個(gè)小氣泡,根據(jù)氣泡大
    的頭像 發(fā)表于 09-25 16:33 ?513次閱讀
    jwt<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>的原理