php 遞歸實現無限極分類和排序_PHP實現選擇排序

這次說說選擇排序。

選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

基本思路

選擇排序的主要優點與數據移動有關。如果某個元素位于正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有一個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬于非常好的一種。

來一張示例動畫圖看一下

49cf36349272702984f763c7e4077889.gif

紅色表示當前最小值,黃色表示已排序序列,藍色表示當前位置。

復雜度分析

選擇排序的交換操作介于 0 和 (n - 1) 次之間。選擇排序的比較操作為 n (n - 1) / 2 次之間。選擇排序的賦值操作介于 0 和 3 (n - 1) 次之間。
比較次數O(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數N=(n-1)+(n-2)+…+1=n*(n-1)/2。

交換次數O(n),最好情況是,已經有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數比冒泡排序少多了,由于交換所需CPU時間比比較所需的CPU時間多,n值較小時,選擇排序比冒泡排序快。

6b2d990c3843e72741dfc272c5881969.gif
時間復雜度    О(n2)
最優時間復雜度    О(n2)
平均時間復雜度    О(n2)
空間復雜度    О(n) total, O(1) auxiliary

百聞不如一run (php實現選擇排序)

<?php/*** User: wujunze* Email: itwujunze@163.com* Blog: https://wujunze.com* Date: 2016/11/5**/function selectSort($arr) {//雙重循環完成,外層控制輪數,內層控制比較次數$len=count($arr);for($i=0; $i<$len-1; $i++) {//先假設最小的值的位置$p = $i;for($j=$i+1; $j<$len; $j++) {//$arr[$p] 是當前已知的最小值if($arr[$p] > $arr[$j]) {//比較,發現更小的,記錄下最小值的位置;并且在下次比較時采用已知的最小值進行比較。$p = $j;}}//已經確定了當前的最小值的位置,保存到$p中。如果發現最小值的位置與當前假設的位置$i不同,則位置互換即可。if($p != $i) {$tmp = $arr[$p];$arr[$p] = $arr[$i];$arr[$i] = $tmp;}}//返回最終結果return $arr;}var_dump(selectSort(array(4,66,3,23,91,36,88,6)));

代碼運行結果

a7adb885536d6a2acd0cebefac2b2908.png
以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要請戳這里鏈接 或者關注咱們下面的專欄
PHP大神進階?zhuanlan.zhihu.com
62ba65c133da1c203427534a03775cac.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532120.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532120.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532120.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

idea for循環快捷鍵_IDEA騷技巧,編碼速度至少快一倍

IDEA是目前市場上最好用的IDE&#xff0c;公認的&#xff01;前幾年eclipse在市場上非常流行&#xff0c;因此大多數人都習慣了eclipse的一些快捷鍵。近年來&#xff0c;隨著IDEA的興起&#xff0c;很多人都放棄了exlipse&#xff0c;進而選擇了IDEA&#xff0c;但是有些人習慣…

從物聯網到 3D 打印:硬件相關的開源項目概覽 | 開源專題 No.52

arendst/Tasmota Stars: 20.4k License: GPL-3.0 Tasmota 是一款為 ESP8266 和 ESP32 設備提供的替代固件&#xff0c;具有易于配置的 webUI、OTA 更新、定時器或規則驅動的自動化功能以及通過 MQTT、HTTP、串口或 KNX 進行完全本地控制。該項目主要特點包括&#xff1a; 支持…

計算機缺少fixos.dll,fix_toolbox.dll

我該如何安裝從金山毒霸下載的DLL文件&#xff1f;一&#xff1a;1、從金山毒霸下載壓縮文件。2、將DLL文件解壓到電腦上的某個地方。3、把該文件跟要求使用它的程序放在同一路徑上。注意32位程序需要使用32位的DLL文件&#xff0c;64位程序需要使用64位的DLL文件。否則會出現0…

helm安裝postgres_Helm 入門介紹 Kubernetes 上的包管理軟件

這篇文章介紹一下云原生應用在 Kubernetes 上安裝時&#xff0c;經常會用到的一個重要工具&#xff0c;Helm。Helm 是 Kubernetes 的包管理軟件。提到包管理軟件&#xff0c;很多人都不陌生。Maven、Gradle、pip、RubyGems 和 npm 都是包管理軟件。作為一個包管理軟件&#xff…

flutter 分割線_Flutter 底部彈框 showModalBottomSheet 使用Demo

題記—— 執劍天涯&#xff0c;從你的點滴積累開始&#xff0c;所及之處&#xff0c;必精益求精。Flutter是谷歌推出的最新的移動開發框架。【x1】微信公眾號的每日提醒 隨時隨記 每日積累 隨心而過 文章底部掃碼關注【x2】各種系列的視頻教程 免費開源 關注 你不會迷路【x3】系…

python迭代器和for循環區別_python迭代器和for循環區別

迭代器(iterator):迭代器對象必須同時實現__iter__和__next__方法才是迭代器。對于迭代器來說&#xff0c;__iter__ 返回的是它自身 self&#xff0c;__next__ 則是返回迭代器中的下一個值,最后沒有元素時&#xff0c;拋出異常(異常可以被開發者看到)。1.迭代器一定是可迭代對象…

python中代理模式分為幾種_通俗 Python 設計模式——代理模式

今天來說一說代理模式。 代理模式顧名思義&#xff0c;是對資源進行代理訪問的一種模式&#xff0c;這里的資源是泛指在程序中會使用到的數據、操作、過程、對象等等。當然&#xff0c;針對不同的資源&#xff0c;代理進行的操作不盡相同&#xff0c;根據前人的總結&#xff0c…

layer文件ajax上傳,layer彈出層數據傳輸到content里面

在項目中使用layer彈出層的時候&#xff0c;遇到一個問題&#xff0c;就是利用ajax請求后臺數據成功時&#xff0c;調用layer彈出層(iframe)&#xff0c;如何把數據傳到iframe里面去&#xff1f;經過百度&#xff0c;發現&#xff0c;使用js把數據拼接起來&#xff0c;然后在su…

清理offset_關于 kafka 日志清理策略的問題

現象&#xff1a;搭建了一個 kafka 服務, 使用 kafka-python 包正常生產數據, 但是 kafka 過五分鐘就把我的 topic 刪除掉. 但是配置 log 的已經配置了, 我認為 kafka 不應該刪除我的 topic 歷史數據.關于 log 清理的配置文件:############################# Log Flush Policy …

python面向對象思路_python面向對象方法

#需求&#xff1a;洗衣機&#xff0c;功能&#xff1a;能洗衣服#1、定義洗衣機類"""class 類名()&#xff1a;代碼"""classWasher():defwash(self):print("能洗衣服")#2 創建對象#對象名 類名()haier Washer()#3、驗證成果#打印haier…

饑荒進地洞服務器無響應,饑荒聯機洞穴設置及常見問題的解決方法

進階篇服務端mod設置&#xff1a;首先(1)下載好要用mod&#xff0c;然后下載通用工具&#xff0c;解壓放到DST的mod文件夾里運行(2)此時在文檔\Klei\DoNotStarveTogether會多出一個文件modoverrides&#xff0c;把它復制到文檔\klei\DoNotStarveTogether_EasyConfigCaves&#…

roads 構筑極致用戶體驗_萬物互聯大勢所趨 華為保駕護航運營商“三個轉型”...

隨著通信技術及其應用的快速發展&#xff0c;人們發現物理世界和數字世界正在加速融合&#xff0c;數字經濟正在改變和顛覆著傳統市場格局。于是人們看到&#xff0c;電子商務、遠程教育、遠程醫療、物聯網、大數據等等&#xff0c;一波接一波的商業浪潮不斷涌現。然而支撐這一…

python列表字典_Python常用對字典、列表的操作

本文中使用的Python版本為3.x。合并兩個列表方法一a [1, 2, 3]b [4, 5, 6]print(a b)print(a)print(b)輸出結果為&#xff1a;[1,2,3,4,5,6][1,2,3][4,5,6]說明&#xff1a;“ab”后&#xff0c;a和b都沒有變化。方法二a [1, 2, 3]b [4, 5, 6]a.extend(b)print(a)print(b)…

魔獸對戰平臺修改服務器數據,《魔獸爭霸3》1.29補丁上線官方對戰平臺:平衡性大做改動...

IT之家3月1日消息 今天《魔獸爭霸》官方微博宣布《魔獸爭霸3》的最新補丁也就是1.29補丁已經登陸官方對戰平臺的PTR服務器上&#xff0c;想要嘗鮮的用戶可以前往官方對戰平臺進行更新和游玩。1.29補丁除了增加對于寬屏游戲的支持之外&#xff0c;還針對英雄單位進行平衡性的改動…

查詢列名在哪張表_探索SQL-多表查詢

一、表的加法&#xff08;Union&#xff09;1、用法&#xff1a;將兩個表合并成一個表2、語句&#xff1a;select 查詢結果 from 從哪張表查詢 union select 查詢結果 from 從哪張表查詢*需保留重復行*select 查詢結果 from 從哪張表查詢 union all select 查詢結果 from 從哪張…

使用未初始化的內存是什么意思_他們都說JVM能實際使用的內存比-Xmx指定的少?這是為什么呢...

這確實是個挺奇怪的問題&#xff0c;特別是當最常出現的幾種解釋理由都被排除后&#xff0c;看來JVM并沒有耍一些明顯的小花招&#xff1a;-Xmx和-Xms是相等的&#xff0c;因此檢測結果并不會因為堆內存增加而在運行時有所變化。通過關閉自適應調整策略(-XX:-UseAdaptiveSizePo…

定義整型數組_C語言基礎-數組怎么用

到目前為止&#xff0c;我們了解到C語言中可以使用整型&#xff0c;浮點型和字符型的數據類型來描述我們人類世界的各種數據&#xff0c;但是這些還遠遠不夠……我們在IOT領域經常會遇到這樣一個數據使用場景&#xff1a;某天的固定時間內&#xff0c;會有多臺&#xff08;我們…

找出一個字符串中出現次數最多的字_海量數據中找出前k大數(topk問題)

在海量數據中找出出現頻率最好的前k個數&#xff0c;或者從海量數據中找出最大的前k個數&#xff0c;這類問題通常被稱為top K問題。針對top K類問題&#xff0c;通常比較好的方案是分治Trie樹/hash小頂堆&#xff08;就是上面提到的最小堆&#xff09;&#xff0c;即先將數據集…

crowd counting_[crowd_counting]-SFCN-CVPR2019amp;amp;GCC dataset

1.Contribution&#xff08;1&#xff09;主要是提出了基于GTA5的GCC數據集數據集下載地址&#xff1a;https://gjy3035.github.io/GCC-CL/?gjy3035.github.io&#xff08;2&#xff09;提出了在如何在GCC上train&#xff0c;然后在傳統的通用數據集上test的遷移學習方案&…

代碼更換ui圖片_用技術的方式,在UI設計稿中設置隨機碼,保證高清

本文首發于&#xff1a;行者AI 在工作中會遇到批量給圖片添加文字&#xff0c;隨機碼等需求&#xff0c;當數據碼數量較大時&#xff0c;UI的工作量就會非常大&#xff0c;這時候我們可以用python來幫我們提高工作效率。1. 需求分析我們有這樣一張圖片&#xff0c;我們需要將一…