php 稳定 排序 库,PHP排序算法系列:冒泡排序

冒泡排序

冒泡排序(英語:Bubble Sort,台灣另外一種譯名為:泡沫排序)是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。

原理

假定有一組數據(亂序),現要將這些數據按從小到大進行排序。

1 從左到右依次比較相鄰的兩個數,將小的數放在左邊,大的數放在右邊,這樣依次比較下來,最大的數在最右方。

2 因為最后一位一定是正確的,所以繼續對除最后一位的數組重復上面的步驟,直到排序完成。

例子

假定有一數組$a=[1,5,6,3,8,4],現需要將它們按從小到大排序

經過步驟一,數組變為$a=[1,5,3,6,4,8],現在保證的數組的最后一位是正確的,接着將數組除了最后一位繼續重復步驟一,直至排序完成。

PHP代碼實現function bubbleSort($myArray){

$length=count($myArray);

for ($i=0; $i

for ($j=0; $j < $length-1-$i; $j++) {

if ($myArray[$j]>$myArray[$j+1]) {

$temp=$myArray[$j];

$myArray[$j]=$myArray[$j+1];

$myArray[$j+1]=$temp;

}

}

}

return $myArray;

}

算法時間復雜度計算

所需關鍵字的比較次數C=n(n-1)/2=O(n2)

所以冒泡排序的時間復雜度為O(n2)

冒泡排序優化思想

對冒泡排序的優化主要是減少交換次數。如果一次掃描中元素沒有發生交換,那么排序就可以結束了。為此可設置一標志量flag,默認為false,如果掃描中發生交換了則把flag置為true,下輪掃描前先檢查這個變量,如果flag=false則排序結束。

更進一步,可以記錄每次掃描中最后一次交換的位置,下次掃描的時候只要掃描到上次的最后交換位置就行了,因為后面的都是已經排好序的,無需再比較。

冒泡排序優化PHP代碼實現function bubbleSort($myArray){

$length=count($myArray);

for ($i=0; $i

$flag=false;

for ($j=0; $j < $length-1-$i; $j++) {

if ($myArray[$j]>$myArray[$j+1]) {

$temp=$myArray[$j];

$myArray[$j]=$myArray[$j+1];

$myArray[$j+1]=$temp;

$flag=true;

}

}

if(!$flag){

return $myArray;

}

}

return $myArray;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值