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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

你好, 我是程序猿零壹。

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

冒泡排序算法

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

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

原理

  1. 比較相鄰的兩個元素,如果第一個比第二個大,就交換他們兩個;
  2. 對每一對相鄰的元素做同樣的動作,從開始的第一對到隊尾的最后一對。在這一點,最后的元素應該是最大的數(shù);
  3. 針對所有元素重復以上的動作,除了最后一個;
  4. 持續(xù)每次對越來越少的元素重復上面的步驟,直到?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ù)參與排序了,第一輪排序結束。

第二輪排序

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

圖片

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

圖片

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

圖片

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

第三輪排序

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

圖片

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

圖片

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

第四輪排序

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

圖片

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

代碼實現(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)用來控制所有輪次,內循環(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;
}

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

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

    關注

    10

    文章

    1919

    瀏覽量

    34500
  • PHP
    PHP
    +關注

    關注

    0

    文章

    452

    瀏覽量

    26612
  • 排序算法
    +關注

    關注

    0

    文章

    52

    瀏覽量

    10045
收藏 人收藏

    評論

    相關推薦

    FPGA排序-冒泡排序介紹

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

    labview 版的冒泡排序

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

    小鳥求助冒泡排序。

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

    冒泡排序

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

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

    的bubble sort(冒泡排序)原理類似于氣泡上升過程,到自身的密度小于上一層介質則上升,排序同理。以數(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

    一文了解冒泡排序

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

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

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

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

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

    冒泡排序的基本思想

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

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

    在數(shù)據(jù)結構中我們學習了解了冒泡排序和Arrays排序的基本算法,但沒能夠用編程語言實現(xiàn)出來。那我們應該怎樣運用Java通過編程語言將冒泡
    的頭像 發(fā)表于 03-02 09:37 ?461次閱讀
    怎樣運用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)是一種簡單的交換排序。之所以叫做冒泡排序,因為我們可以把每個元素當成一個小氣泡,根據(jù)氣泡大
    的頭像 發(fā)表于 09-25 16:33 ?484次閱讀
    jwt<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>的原理