PHP中數組的三種排序方法

来源:http://www.cnblogs.com/shouce/archive/2016/03/31/5339788.html
-Advertisement-
Play Games

說明:找到最大的數,排列到最後面,然後繼續找 例: $arr = array(3,5,-1,0,2); for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-1-$i;$j++){ if($arr[$j]>$arr[$j+1]){ $tem ...


說明:找到最大的數,排列到最後面,然後繼續找   例: $arr = array(3,5,-1,0,2); for($i=0;$i<count($arr)-1;$i++){     for($j=0;$j<count($arr)-1-$i;$j++){         if($arr[$j]>$arr[$j+1]){             $temp = $arr[$j];             $arr[$j]=$arr[$j+1];             $arr[$j+1]=$temp;         }     } } 理解: 3,5,-1,0,2     //從第一個數開始往後比較,如果比後面的數大則與後面的數調位置      //第一次,3小於5,那麼不變     //第二次,5大於-1,那麼變成 3,-1,5,0,2     //第三次,5大於0 3,-1,0,5,2     //第四次,5大於2 3,-1,0,2,5     至此完成一次內迴圈,此時最後一個數完成排序,下次將不參與 3,-1,0,2,5 第二次外迴圈開始     第一次:3大於-1 -1,3,0,2,5     第二次:3大於0 -1,0,3,2,5     第三次:3大於2 -1,0,2,3,5     至此完成後面兩位數的排序了,接下來類推 -1,0,2,3,5   二、選擇排序法     說明:先假設第一個數就是最小的數,然後將後面的數依次與它比較,如果假設的數不是最小的數,就將它與後面的最小的數調換位置 $arr=array(2,1,-1,3,0); for($i=0;$i<count($arr)-1;$i++){     $minval = $arr[$i];     $minindex = $i;     for($j=1+$i;$j<count($arr);$j++){         if($arr[$j]<$minval){             $minval = $arr[$j];             $minindex = $j;         }     }     $temp = $arr[$i];     $arr[$i] = $arr[$minindex];     $arr[$minindex] = $temp; } 理解: 2,1,-1,3,0     //先假設第一個數2為最小值,它後面的數依次與2做比較,尋找到最小的那個數 過程: 1小於2,那麼minval=1 -1小於1,那麼minval=-1 3大於-1,不變 0大於-1,不變 那麼現在就找到了該數組中最小的數了為-1 將-1與2調換位置就完成第一個數的排序了 那麼現在數組變成 -1,1,2,3,0 現在第一個數-1已經為有序,所以不參與比較了,往後面繼續 現在假設minval=1 2大於1,不變 3大於1,不變 0小於1,那麼minval=0 現在一次迴圈完成,調換0與1的位置完成第二個數的排序 那麼現在數組變成 -1,0,2,3,1 //後面的推法與上面相同。。。   三、插入排序法 說明:先假設一個數組中的第一個數為單獨的有序數組,再將後面的一個數與它【這裡隨它I的增長,就變成它們了】做比較,如果後面的數比假設的數還小,則將小的那個數後移,最後將那個數移到最前面 $arr=array(2,1,-1,3,0); for($i=1;$i<count($arr);$i++){     $insertval=$arr[$i];     $insertindex = $i-1;     while($insertindex>=0 && $insertval<$arr[$insertindex]){         $arr[$insertindex+1]=$arr[$insertindex];         $insertindex--;     }     $temp = $arr[$i];     $arr[$insertindex+1]=$insertval; } 理解: 2,1,-1,3,0     //第一次,先保存待插入的數1為insertval,再拿 insertval 與2比較,1小於2,所以把2後移,變成如下的圖 2,2,-1,3,0     //此時2前面沒有數字了,insertindex=0,所以比較完成,那麼將insertval插入到尋找到的這個位置。變成如下圖 1,2,-1,3,0     //此時,1,2變成有序數組     //第二次,先保存待插入的數-1為insertval,再拿insertval與2做比較,-1小於2,所以把2後移,變成如下圖 1,2,2,3,0     //此時,再拿insertval與1做比較,-1小於1,那麼把-1後移,變成如下圖(這就是一個拿待插入數與前面的有序數組比較的過程) 1,1,2,3,0     //此時,insertindex到頭了,所以將insertval插入該位置 -1,1,2,3,0     //後面推法如上
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 日常開發的絕大多數系統中,都涉及到管理用戶的登錄和授權問題。登錄功能(Authentication),針對於所有用戶都開放;而授權(Authorization),則對於某種用戶角色才開放。 在asp.net mvc中,微軟雖然已經幫助開發者構建了ASP.NET Identity這樣強大的驗證授權框架 ...
  • 一、開發環境 操作系統:Win10 編譯器:VS2013 .Net版本:.net framework4.5 二、涉及程式集 Spring.Core.dll:1.3.1 Common.Logging.dll 三、開發過程 1.項目結構 2.編寫Product.cs namespace SpringNe... ...
  • 作者:[美]Adam Freeman 來源:《精通ASP.NET MVC 4》 前面建立的都是簡單的MVC程式,現在到了吧所有事情綜合在一起,以建立一個簡單但真實的電子商務應用程式的時候了。 在此打算建立的應用程式 — SportsStore (體育用品商店),將遵循隨處可見的線上商店所採取的經典方 ...
  • 1、讀取網路中html網頁內容,獲取網頁中元素body內的html,處理所有img元素的src屬性後以字元串返回 2、通過HtmlAgilityPack Html操作類庫將html格式的字元串載入為html文檔對象,再對html dom進行操作 持續更新中,敬請期待... ...
  • SqlHelper類 作用:充當一個助人為樂的角色。這個類呢,任何類都可以調用。例如:數據的“增, 刪, 改 ,查”,資料庫的鏈接,等等。 這個類是靜態類,只要用類名.方法名(),就可以使用該方法的功能了。 作用:簡化代碼,提高性能,提高運行效率。 string sql = "select * fr ...
  • 不做開篇廢話,我們發現: AdaptiveTrigger 不夠好 我們知道,UWP可以在一個頁面適應不同尺寸比例的屏幕。一般來說這個功能是通過官方推薦的AdaptiveTrigger 進行的。 比如這樣: 我們可以看到這樣的的Trigger制定了最小值,隱含了條件“當滿足長寬都大於於這個條件時,這個 ...
  • 上面兩章,主要講基本的配置,今天我們來做一個比較有趣的東西,為每個客戶加一個頭像圖片。如果我們圖片保存在自己的伺服器,對於伺服器要求有點高,每次下載的時候,都會阻塞網路介面,要是1000個人同時訪問這張圖片,會徹底報廢掉整個網路。如果你跟我一樣,在小公司,沒有自己專業的圖片伺服器,又想用圖片,那就跟 ...
  • 偶然在國外一個網站瞅到的,非常的酷,發出來共用一下。一般來說,Python和Java,C#一樣是沒有尾遞歸自動優化的能力的,遞歸調用受到調用棧長度的限制被廣泛的詬病,但是這個狂人用一個匪夷所思的方法解決了這個問題併在Python上實現了,從此Python的遞歸調用再也不用受到調用棧長度的制約,太酷了 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...