冒泡算法、快速排序、二分查找
1.什么是冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来
说并没有什么太大作用。
2. 算法步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
3.代码
$arr = [9,10,4,8,3];
for($j=0;$j<count($arr)-1;$j++){
for($i=0;$i<count($arr)-1-$j;$i++){
if($arr[$i] > $arr[$i+1]){
$tmp = $arr[$i];
$arr[$i]=$arr[$i+1];
$arr[$i+1]=$tmp;
}
}
}
print_r($arr);
4.展示效果
1.什么是快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。
2. 算法步骤
速排序由C. A. R.
Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
3.代码
//快速排序
$arr = [10,14,3,7,9,53,24,5,7,3];
function quick_sort($arr){
if(count($arr) <= 1){
return $arr;
}
$modesc = $arr[0];
$left = array();
$right = array();
for($i=1;$i<count($arr);$i++){
if($arr[$i] <= $modesc){
array_push($left,$arr[$i]);
}else if($arr[$i] >= $modesc){
array_push($right,$arr[$i]);
}
}
$left = quick_sort($left);
$right = quick_sort($right);
$name = array_merge($left,array($modesc),$right);
return $name;
}
$data = quick_sort($arr);
print_r($data);
4.展示效果
1.什么是二分查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
2.注意事项
查询的数据必须是按照顺序来排序的,从大到小或从小到大。
3.代码
$data = [3,4,20,23,34,45,63,72];
//二分查模式
function getCkend($data,$num){
$offset = 0;
$end = count($data) - 1;
while($offset <= $end){
$midden = ceil(($offset + $end)/2);
if($num == $data[$midden]){
return $data[$midden];// break;
}elseif($num > $data[$midden]){
$offset = $midden + 1;
}elseif($num < $data[$midden]){
$end = $midden - 1;
}
}
}
$name = getCkend($data,63);
print_r($name);
4.展示效果
感谢你的观看,希望对你有帮助
上一篇: 2. Java数据类型