标签:
常见的排序算法有Bubble Sort、Merge Sort、Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序。
这里分享一下Buuble Sort算法,php版本的。冒泡排序不适合在待排序的数据集特别大的情况下,这里只是一个简易的demo,待排序的数据在10以内。
冒泡排序算法有2种极端的情况所导致的算法复杂度是不一样的:
初学者在写冒泡排序时很少考虑,如果当数据自身就是一个有序数据集时,对此排序如果不做优化则算法的复杂度则为O(n^2)
下面是PHP版本的2中写法:
第一种
1 function bubbleSort($arr,$n){ 2 $swap; //定义 swap 解决最优算法 3 for($i=0;$i<$n-1;$i++ ){ 4 $swap = false; 5 for($j=0;$j<$n-1-$i;$j++){ 6 if($arr[$j] > $arr[$j+1]){ 7 $tmp = $arr[$j]; 8 $arr[$j] = $arr[$j+1]; 9 $arr[$j+1] = $tmp; 10 $swap = true; 11 } 12 $k++; 13 } 14 if ($swap == false) 15 break 1; 16 } 17 }
第二种
1 function newBubbleSort($arr,$n){ 2 do { 3 $sorted = 1; 4 --$n; 5 for($i=0;$i < $n;$i++){ 6 if($arr[$i] > $arr[$i+1]){ 7 $t = $arr[$i]; 8 $arr[$i] = $arr[$i+1]; 9 $arr[i+1] = $t; 10 $sorted = 0; 11 } 12 } 13 } while (!$sorted); 14 }
通过定义标志位来优化冒泡排序算法。
标签:
原文地址:http://www.cnblogs.com/stackflow/p/4346045.html