冒泡排序以及遇到一個關於數組一大一小的問題

来源:http://www.cnblogs.com/qingfj/archive/2016/08/06/5744740.html
-Advertisement-
Play Games

冒泡排序 冒泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。 冒泡排序演算法的運作如下:(從後往前) l 依次比較相鄰的兩個元素,消除逆序(逆序是數學上的概念,是成對出現的,比如50,30就是一對逆序,所謂的消除逆序,就是大的放後面,小的放前面) l 這樣,一輪比較下來,最大 ...


冒泡排序

冒泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。

冒泡排序演算法的運作如下:(從後往前)

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重覆以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重覆上面的步驟,直到沒有任何一對數字需要比較。

 

l  依次比較相鄰的兩個元素,消除逆序(逆序是數學上的概念,是成對出現的,比如50,30就是一對逆序,所謂的消除逆序,就是大的放後面,小的放前面)

l  這樣,一輪比較下來,最大的那個數一對是在最後面!

l  然後,再繼續新的一輪的比較,註意,剛纔一輪後的最大值不再參與比較,這樣,這一輪參與比較的數值就比上一輪少一個如此反覆,直到最後只剩下兩個數值比較為止

 

所以是一個雙重迴圈,外層控制輪數,內層控制每輪比較的次數。 

如果數組有n個元素,一共需要比較n-1輪,也就是外迴圈的次數!

 

補充一個其他知識點:

list — 把數組中的值賦給一些變數 ,從小到大,反過來賦值從大到小

 

 

下麵說一下我寫的冒泡排序,以及註釋我自己對它的理解:

//冒泡排序,讓數組從小到大依次排序
function maopao($arr){
    //雙層迴圈,外層控制,$i代表迴圈的輪數,比較輪數等於數組的個數減1,$i<$len相當於數組個數-1,例如8個,當$i=7是最後的比較,符合8-1=7;
    for($i=1,$len=count($arr);$i<$len;$i++){
        //內層控制每一輪比較的次數,$k=下標,每一輪比較完最後一個將不再參與比較,下標從0開始
        for($k=0;$k<$len-$i;$k++){
            //比較相鄰的兩個數,如果前面的數值比後面的大就調換下位置,通過中間數,如果不比它大,則不用調換
            if($arr[$k]>$arr[$k+1]){
                //調換位置
                $tem=$arr[$k];
                $arr[$k]=$arr[$k+1];
                $arr[$k+1]=$tem;
            }
        }
    }
    return $arr;
}
$arr1=array(45,85,12,22,36,7,75,15,40,64);
// echo count($arr1);
echo '<pre>';
print_r(maopao($arr1));

效果:實現了數組從小到大的排序

如果要實現從大到小,也是一樣的演算法,都是通過中間數的比較進行交換。

 

接下來說一說我在面試遇到的一個問題:取一個數組,讓這個數組按第一個最大,第二個最小,第三個第二大,第四個第二小…這樣進行排序。

當時我只想到好像有個

array_pop:將數組的最後一個數據彈出

array_shift:從數組的前面彈出數據

那讓數組從大到小排序後,彈出第一個就拿到最大的,彈出最後一個就拿到最小的,把這兩個放一起就一個最大一個最小,再繼續進行這樣的取出,直到取完所有。

最讓我開心,欣慰的是面我的技術老大肯定了我的邏輯是可以的,高興了好幾天….

回去我就去嘗試我這個可不可行,下麵我就說下我自己試的這個方法

 

舉例:

 

 

所以第一步:我是先讓數組進行通過冒泡進行從大到小的排序

 

第二步,我是通過遞歸把彈出來的第一個(最大)和最後一個(最小)放一起,再進行取出,直到取完為止。

 

效果:

這個有更好的方法,我這裡說的是我當時剛好想到的那個方法,哈,莫見怪,望吐槽。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在開發過程中經常需要發佈到開發環境、測試環境或者預發佈環境上給其他同事進行測試驗證效果等等,每次發佈都要備份,拷貝,修改配置文件等等重覆操作非常的麻煩,效率大打折扣,而web部署提供了這樣的解決方案:在服務端安裝Web Deploy服務,由Web Deploy服務完成備份發佈等操作,今天小編就以圖文 ...
  • 一、前言 Treeview控制項常用於遍歷本地文件信息,通常與Datagridview與ImageList搭配。ImageList控制項用於提供小圖片給TreeView控制項,DatagridView通常顯示TreeNode節點下文件及文件夾的信息。 效果圖: 二、代碼 初始化窗體: 初始化DataGri ...
  • 項目架構採用:Asp.Net MVC4.0 + EntityFramework6.0 code first + AutoMapper + Unity(IOC) + SqlServer2012 項目地址:www.xiaoboke.net 這個博客會不斷開發完善哦 歡迎大家去吐槽和提建議,一起學習,一起 ...
  • 使用自動載入和解析url的參數,實現調用到不同的控制器,實現了pathinfo模式和普通的url模式 文件結構: |--Controller |--Index |--Index.php |--Application.php Application.php \Controller\Index\Inde ...
  • 前言:在javaweb開發中自定義標簽的用處還是挺多的。今天和大家一起看自定義標簽是如何實現的。 1:什麼是標簽 標簽是一種XML元素,通過標簽可以使JSP頁面變得簡介易用,而且標簽具有很好的復用性。 2:自定義標簽的標簽庫主要的介面以及類的繼承實現關係圖 3:一步步實現自定義標簽 3.1:Tag接 ...
  • rest api的參數想即能支持application/x-www-form-urlencoded也能支持application/json方式傳參。 ...
  • 一、Hibernate中的關聯關係 1.1、單向一對多關聯關係 按照以下步驟配置hibernate中持久化類的一對多對象關聯: (1).持久化類添加關聯類的相關屬性及getter/setter方法。 (2).映射文件中建立該屬性和資料庫表欄位的映射信息。 比如班級對學生是一對多的關係,班級類Grad ...
  • scala除了方法外還支持函數,方法是對對象進行操作,而函數不是。(類型與java中靜態方法,媽蛋,好歹也寫過C和C++這還理解不深刻了)。除此之外,寫法一樣。 object add{ //指定返回值類型,返回的值不需要使用return指定,會取最後一個表達式的值。 def abs(x:Double ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...