We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
什么是冒泡排序,就像河里的气泡一样,一个一个的气泡浮出水面,而这里是一个一个的数字,他的原理是重复的走访(遍历)要排序的数列,比较相邻的两个数,把大的数移到右边,接着遍历,直到所有数完成从小到大的顺序。每次比较出来当前最大的,下轮比较余下的数,用两个循环去做,外层循环控制轮数,内层循环控制比较的元素: //http://www.cnblogs.com/geek12/p/3698410.html
/** * 冒泡排序 */ $list = Array(6,8,7,2,3,4,1); echo "排序前"; print_r($list); function mao($arr){ for($i=1,$len=count($arr);$i<$len;++$i){ // 外层循环 数组个数-1 也就是找几次最大数,找出数组个数-1个就可以了 for($k=0,$klen=$len-$i;$k<$klen;++$k){ // 内层循环,比较两个数组元素 第一次循环找出最大的那个 if($arr[$k]>$arr[$k+1]){ $temp = $arr[$k]; $arr[$k] = $arr[$k+1]; $arr[$k+1] = $temp; } } } return $arr; } echo "<br/>排序后"; print_r(mao($list)); 在做冒泡的过程中,思路一直在别人的思想中,在百度的过程中,看到另一种方法,觉得不错也写过来了: $list = Array(6,8,7,2,3,4,1); echo "排序前"; print_r($list); function mao($arr){ for($i=0,$len=count($arr)-1;$i<$len;++$i){ // 外层循环 进行第一层遍历 // 内层循环,在外层的基础上加一,来控制两个元素的比较 for($k=$i+1;$k<=$len;++$k){ if($arr[$i]>$arr[$k]){ $temp = $arr[$i]; $arr[$i] = $arr[$k]; $arr[$k] = $temp; } } } return $arr; } echo "<br/>排序后"; print_r(mao($list)); /** * 冒泡排序 bubble sort * * 原理:多次循环进行比较,每次比较时将最大数移动到最上面。每次循环时,找出剩余变量里的最大值,然后减小查询范围。这样经过多次循环以后,就完成了对这个数组的排序 */ function sort_bubble($list) { $len = count($list); if(empty($len)) return $list; for($i = 0;$i < $len; $i++) { for($j = $i + 1; $j < $len; $j++) { $flag = ''; if($list[$i] > $list[$j]) // 从小到大 //if($list[$i] < $list[$j]) // 从大到小 { $tmp = $list[$i]; $list[$i] = $list[$j]; $list[$j] = $tmp; $flag = " change"; } echo implode(',',$list).$flag."<br/>"; } echo "-------------------------<br/>"; } return $list; } $list = array(4,3,2,1,5,7,3,7); $list = sort_bubble($list); function bubble_sort($array) { for ($i = 0; $i < count($array) - 1; $i++) { //$i为已经排过序的元素个数 for ($j = 0; $j < count($array) - 1 - $i; $j++) { //$j为需要排序的元素个数,用总长减去$i if ($array[$j] > $array[$j + 1]) { //按升序排序 $temp = $array[$j]; $array[$j] = $array[$j + 1]; $array[$j + 1] = $temp; } } } return $array; } $a = array(5, 1, 4, 7); i = 0; j = 0; if($arr[0] > $arr[1]) => 5 > 1 条件成立,交换位置,形成新的数组 => 1 5 4 7 j++ if($arr[1] > $arr[2]) => 5 > 4 条件成立,交换位置, 形成新的数组 => 1 4 5 7 j++ if($arr[2] > $arr[3]) => 5 > 7 条件不成立 ,数组保持不变 , 1 4 5 7 j++ j=3 退出内层循环, i++
The text was updated successfully, but these errors were encountered:
http://www.zhihu.com/question/20063815
Sorry, something went wrong.
http://www.php100.com/html/php/rumen/2013/1029/6333.html
No branches or pull requests
什么是冒泡排序,就像河里的气泡一样,一个一个的气泡浮出水面,而这里是一个一个的数字,他的原理是重复的走访(遍历)要排序的数列,比较相邻的两个数,把大的数移到右边,接着遍历,直到所有数完成从小到大的顺序。每次比较出来当前最大的,下轮比较余下的数,用两个循环去做,外层循环控制轮数,内层循环控制比较的元素:
//http://www.cnblogs.com/geek12/p/3698410.html
The text was updated successfully, but these errors were encountered: