亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

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

汽車電子技術(shù) ? 來源: 程序猿零壹 ? 作者:程序猿零壹 ? 2023-01-20 10:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

你好, 我是程序猿零壹。

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

冒泡排序算法

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

這個算法的名字由來是因為越小的元素經(jīng)過交換之后,會慢慢的浮到數(shù)列的頂端,就像碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”。

原理

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

排序過程

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

圖片

第一輪排序

第一次排序,將指針放在隊首位置,即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已經(jīng)處于隊尾的位置,不需要再繼續(xù)參與排序了,第一輪排序結(jié)束。

第二輪排序

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

圖片

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

圖片

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

圖片

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

第三輪排序

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

圖片

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

圖片

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

第四輪排序

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

圖片

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

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

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

改動后的代碼如下:

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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1957

    瀏覽量

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

    關(guān)注

    0

    文章

    459

    瀏覽量

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

    關(guān)注

    0

    文章

    53

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    FPGA排序-冒泡排序介紹

    排序算法是圖像處理中經(jīng)常使用一種算法,常見的排序算法有插入排序、希爾排序、選擇排序、冒泡
    發(fā)表于 07-17 10:12 ?1489次閱讀
    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

    冒泡排序

    package algorithms// 冒泡排序// 冒泡排序算法的運作如下:// 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。// 對每一對相鄰元素作同樣的工作,從開始第
    發(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針對對象:對n個數(shù)從小到大進行排序(從大到小同理)思路分析:經(jīng)典的bubble sort(冒泡排序)原理類似于
    發(fā)表于 09-12 10:42

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

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

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

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

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

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

    C語言教程之冒泡排序

    C語言教程之冒泡排序,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-22 11:06 ?0次下載

    一文了解冒泡排序

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

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

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

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

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

    冒泡排序的基本思想

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

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

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

    jwt冒泡排序的原理

    jwt簡介 冒泡排序: (Bubble Sort)是一種簡單的交換排序。之所以叫做冒泡排序,因為我們可以把每個元素當(dāng)成一個小氣泡,根據(jù)氣泡大
    的頭像 發(fā)表于 09-25 16:33 ?999次閱讀
    jwt<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>的原理