php 递归实现无限极分类和排序_PHP实现选择排序
這次說說選擇排序。
選擇排序(Selection sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
基本思路
選擇排序的主要優(yōu)點(diǎn)與數(shù)據(jù)移動(dòng)有關(guān)。如果某個(gè)元素位于正確的最終位置上,則它不會(huì)被移動(dòng)。選擇排序每次交換一對(duì)元素,它們當(dāng)中至少有一個(gè)將被移到其最終位置上,因此對(duì)n個(gè)元素的表進(jìn)行排序總共進(jìn)行至多n-1次交換。在所有的完全依靠交換去移動(dòng)元素的排序方法中,選擇排序?qū)儆诜浅:玫囊环N。
來一張示例動(dòng)畫圖看一下
紅色表示當(dāng)前最小值,黃色表示已排序序列,藍(lán)色表示當(dāng)前位置。
復(fù)雜度分析
選擇排序的交換操作介于 0 和 (n - 1) 次之間。選擇排序的比較操作為 n (n - 1) / 2 次之間。選擇排序的賦值操作介于 0 和 3 (n - 1) 次之間。
比較次數(shù)O(n^2),比較次數(shù)與關(guān)鍵字的初始狀態(tài)無關(guān),總的比較次數(shù)N=(n-1)+(n-2)+…+1=n*(n-1)/2。
交換次數(shù)O(n),最好情況是,已經(jīng)有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數(shù)比冒泡排序少多了,由于交換所需CPU時(shí)間比比較所需的CPU時(shí)間多,n值較小時(shí),選擇排序比冒泡排序快。
時(shí)間復(fù)雜度 О(n2) 最優(yōu)時(shí)間復(fù)雜度 О(n2) 平均時(shí)間復(fù)雜度 О(n2) 空間復(fù)雜度 О(n) total, O(1) auxiliary百聞不如一run (php實(shí)現(xiàn)選擇排序)
<?php/*** User: wujunze* Email: itwujunze@163.com* Blog: https://wujunze.com* Date: 2016/11/5**/function selectSort($arr) {//雙重循環(huán)完成,外層控制輪數(shù),內(nèi)層控制比較次數(shù)$len=count($arr);for($i=0; $i<$len-1; $i++) {//先假設(shè)最小的值的位置$p = $i;for($j=$i+1; $j<$len; $j++) {//$arr[$p] 是當(dāng)前已知的最小值if($arr[$p] > $arr[$j]) {//比較,發(fā)現(xiàn)更小的,記錄下最小值的位置;并且在下次比較時(shí)采用已知的最小值進(jìn)行比較。$p = $j;}}//已經(jīng)確定了當(dāng)前的最小值的位置,保存到$p中。如果發(fā)現(xiàn)最小值的位置與當(dāng)前假設(shè)的位置$i不同,則位置互換即可。if($p != $i) {$tmp = $arr[$p];$arr[$p] = $arr[$i];$arr[$i] = $tmp;}}//返回最終結(jié)果return $arr;}var_dump(selectSort(array(4,66,3,23,91,36,88,6)));代碼運(yùn)行結(jié)果
以上內(nèi)容希望幫助到大家,很多PHPer在進(jìn)階的時(shí)候總會(huì)遇到一些問題和瓶頸,業(yè)務(wù)代碼寫多了沒有方向感,不知道該從那里入手去提升,對(duì)此我整理了一些資料,包括但不限于:分布式架構(gòu)、高可擴(kuò)展、高性能、高并發(fā)、服務(wù)器性能調(diào)優(yōu)、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優(yōu)化、shell腳本、Docker、微服務(wù)、Nginx等多個(gè)知識(shí)點(diǎn)高級(jí)進(jìn)階干貨需要的可以免費(fèi)分享給大家,需要請(qǐng)戳這里鏈接 或者關(guān)注咱們下面的專欄PHP大神進(jìn)階?zhuanlan.zhihu.com 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的php 递归实现无限极分类和排序_PHP实现选择排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海火车站店七天连锁酒店大床价格
- 下一篇: 坐飞机为什么不让带可乐?