php排序算法有哪些,PHP常见的几种排序算法
一、冒泡排序
排序原理:對一組數(shù)據(jù),比較相鄰數(shù)據(jù)的大小,把小的數(shù)據(jù)放在前面,值大的放在后面(升序排序)
舉例說明: $arr = [6, 3, 8, 2, 9, 1];
第一輪排序:
第一次比較 6和3比較:?3? ? 6? ?8? ?2? ?9? ?1
第二次比較 6和8比較:?3? ?6? ?8? ?2? ?9? ?1
第三次比較 8和2比較:?3? ? 6???2 ?89? ?1
第四次比較 8和9比較:?3? ? 6???2???8? ?9 ?1
第五次比較 9和1比較:?3? ? 6? ?2? ?8? ?1? ?9
第一輪比較總結(jié):1.排序第1輪、比較5次,沒有獲得從小到大的排序 ? 2.因?yàn)槊看伪容^都是大數(shù)往后靠,所以比較完成后,可以確定大數(shù)排在最后(9 已經(jīng)冒泡冒出來了,下輪比較可以不用比較了?)
第二輪排序:
第一次比較 3和6比較:?3? ? 6? ?8? ?2? ?1? ?9
第二次比較 6和8比較:?3? ? 6? ?8? ?2? ?1? ?9
第三次比較 8和2比較:?3? ? 6???2? ?8? ?1? ?9
第四次比較 8和1比較:?3? ? 6???2???1? ?8? ?9
第二輪比較總結(jié):1.排序第2輪、比較4次,沒有獲得從小到大的排序 ? 2.冒泡出了 8,下輪不用比較8 了
第三輪排序:
第一次比較 3和6比較:?3? ? 6? ?2? ?1? ?8? ?9
第二次比較 6和2比較:?3? ? 2? ?6? ?1? ?8? ?9
第三次比較 6和1比較:?3? ? 2??1? ?6? ?8? ? 9
第三輪比較總結(jié):1.排序第3輪、比較3次,沒有獲得從小到大的排序 ? 2.冒泡出了 6,下輪不用比較6 了
第四輪排序:
第一次比較 3和2比較:?2? ? 3???1? ?6? ?8? ? 9
第二次比較 3和1比較:?2? ? 1? ?3? ?6? ?8? ?9
第四輪比較總結(jié):1.排序第4輪、比較2次,沒有獲得從小到大的排序 ? 2.冒泡出了 3,下輪不用比較3 了
第五輪比較
第一次比較2和1比較:?1? ? 2??3? ?6? ?8? ? 9
第五輪比較總結(jié):1.排序第5輪、比較1次,沒有獲得從小到大的排序 ? 2.冒泡出了 2,由于還剩一個1,不用再比較了,至此通過5輪排序,完成整個排序
結(jié)論:對于一個長度為N的數(shù)組,我們需要排序 N-1 輪,每 i 輪 要比較 N-i 次。對此我們可以用雙重循環(huán)語句,外層循環(huán)控制循環(huán)輪次,內(nèi)層循環(huán)控制每輪的比較次數(shù)。
代碼實(shí)現(xiàn):
二、選擇排序
原理:在一組數(shù)據(jù)中,選出最小數(shù)與第一個位置的數(shù)交換。讓胡在剩些的數(shù)再找最小的數(shù)與第二個位置的數(shù)交換,如此類推。
舉例說明: $arr = [6, 3, 8, 2, 9, 1];
第一輪:
第一次比較: 第一個數(shù)6與3? 8? 2? 9? 1中的3比較,最小數(shù)為3,位置為1
第二次比較: 第最小數(shù)3與3??8? 2? 9? 1中的8比較,最小數(shù)為3,位置為1
第三次比較: 第最小數(shù)3與3??8??2? 9? 1中的2比較,最小數(shù)為2,位置為3
第四次比較: 第最小數(shù)2與3??8? 2??9? 1中的9比較,最小數(shù)為2,位置為3
第五次比較: 第最小數(shù)2與3??8? 2? 9??1中的1比較,最小數(shù)為1,位置為5
第一輪比較完成后,確定最小數(shù)為1,小于第一個數(shù)6,交換位置上的數(shù),交換后結(jié)果為?1 ?3 ?8 ?2 ?9 ?6
第二輪:
第一次比較: 第一個數(shù)3與??8? 2? 9? 6中的8比較,最小數(shù)為3,位置為1
第二次比較: 第最小數(shù)3與? 8??2? 9? 6中的2比較,最小數(shù)為2,位置為3
第三次比較: 第最小數(shù)2與? 8? 2??9? 6中的9比較,最小數(shù)為2,位置為3
第三次比較: 第最小數(shù)2與? 8? 2??9??6中的6比較,最小數(shù)為2,位置為3
第二輪比較完成后,確定最小數(shù)為2,小于第二個數(shù)3,交換位置上的數(shù),交換后結(jié)果為?1 ?2 ?8 ?3 ?9 ?6、、
第三輪:
第一次比較: 第一個數(shù)8與??3? 9? 6中的8比較,最小數(shù)為3,位置為3
第二次比較: 第最小數(shù)3與? 3??9? 6中的9比較,最小數(shù)為3,位置為3
第三次比較: 第最小數(shù)2與? 3??9??6中的6比較,最小數(shù)為3,位置為3
第三輪比較完成后,確定最小數(shù)為3,小于第三個數(shù)8,交換位置上的數(shù),交換后結(jié)果為?1 ?2 ?3 ?8 ?9 ?6
第四輪:
第一次比較: 第一個數(shù)8與??9? 6中的9比較,最小數(shù)為8,位置為3
第二次比較: 第最小數(shù)8與??9??6中的6比較,最小數(shù)為6,位置為5
第四輪比較完成后,確定最小數(shù)為6,小于第四個數(shù)8交換位置上的數(shù),交換后結(jié)果為?1 ?2 ?3 ?6 ?9 ?8
第五輪:
第一次比較: 第一個數(shù) 9與?8 中的8比較,最小數(shù)為8,位置為5
第五輪比較完成后,確定最小數(shù)為8,小于第五個數(shù)9,交換位置上的數(shù),交換后結(jié)果為?1 ?2 ?3 ?6 ?8 ?9
綜合以上五輪比較,每一輪比較都可以確定一個位置,對于N個數(shù),比較N-1輪可以確定N個位置上的數(shù),因?yàn)榇_定了N-1個位置,最后一個位置也就確定了
代碼實(shí)現(xiàn):
三、插入排序
在要排序的一組數(shù)中,假設(shè)前面的數(shù)已經(jīng)是排好順序的,現(xiàn)在要把第n個數(shù)插到前面的有序數(shù)中,使得這n個數(shù)也是排好順序的。如此反復(fù)循環(huán),直到全部排好順序
代碼實(shí)現(xiàn):
四、快速排序
從數(shù)組第一個元素開始依次確定從小到大的元素
代碼實(shí)現(xiàn):
總結(jié)
以上是生活随笔為你收集整理的php排序算法有哪些,PHP常见的几种排序算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为了创新和变化!支付宝开启近7年最大一次
- 下一篇: php unset 多可以什么_php