全面实现PHP排序算法

来源:互联网 发布:手机淘宝装修免费模板 编辑:程序博客网 时间:2024/05/22 15:43

一般排序算法

<?

1.插入排序(一维数组)

原理:

首先新建一个空列表,用于保存已排序的有序数列(我们称之为"有序列表")。
从原数列中取出一个数,将其插入"有序列表"中,使其仍旧保持有序状态。
重复2号步骤,直至原数列为空。
插入排序的平均时间复杂度为平方级的,效率不高,但是容易实现。它借助了"逐步扩大成果"的思想,使有序列表的长度逐渐增加,直至其长度等于原列表的长度。

function insert_sort($arr){
$countcount = count($arr); 
for($i=1; $i<$count; $i++){
$tmp = $arr[$i];
$j = $i - 1; 
while($arr[$j] > $tmp){
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
$j--; 
}
}
return $arr;

}


2.冒泡排序

原理:

首先将所有待排序的数字放入工作列表中。
从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。
重复2号步骤,直至再也不能交换。
冒泡排序的平均时间复杂度与插入排序相同,也是平方级的,但也是非常容易实现的算法。

for($i=0;$i<$countNum-1;$i++){
for($j=1;$j<$countNum-$i;$j++){
if($arr1[$j-1] > $arr1[$j]){
// $logger->debug("进入冒泡了#");
$temp = $arr1[$j];
$arr1[$j] = $arr1[$j-1];
$arr1[$j-1] = $temp;
}
}
}


3.选择排序

设数组内存放了n个待排数字,数组下标从1开始,到n结束。
i=1
从数组的第i个元素开始到第n个元素,寻找最小的元素。
将上一步找到的最小元素和第i位元素交换。
如果i=n-1算法结束,否则回到第3步
选择排序的平均时间复杂度也是O(n&sup2;)的。
举例:
564
比如说这个,我想让它从小到大排序,怎么做呢?
第一步:从第一位开始找最小的元素,564中4最小,与第一位交换。结果为465
第二步:从第二位开始找最小的元素,465中5最小,与第二位交换。结果为456
第三步:i=2,n=3,此时i=n-1,算法结束
完成

Void SelectSort(Node L[])

{

Int i,j,k;//分别为有序区,无序区,无序区最小元素指针

For(i=0;i<length;i++)

{

k=i;

For(j=i+1;j<length;j++)

{

If(L[j]<L[k])

k=j;

}

If(k!=i)//若发现最小元素,则移动到有序区

{

Int temp=L[k];

L[k]=L[i];

L[i]=L[temp];

}

 

}

}


高效排序算法:

1.快速排序:

//快速排序(一维数组)   
function quick_sort($array){   
if (count($array) <= 1) return $array;   
 
$key = $array[0];   
$left_arr = array();   
$right_arr = array();   
for ($i=1; $i<count($array); $i++){   
if ($array[$i] <= $key)   
$left_arr[] = $array[$i];   
else   
$right_arr[] = $array[$i];   
}   
$left_arr = quick_sort($left_arr);   
$right_arr = quick_sort($right_arr);   
 
return array_merge($left_arr, array($key), $right_arr);   


参考:http://baike.baidu.com/link?url=CxvJD4CvoiOXzsDTH34kLzjvQ00SWRXpzEJHAdWzSrwn3nDm0qveeQgoKnb0SVIw

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 用来注册亚马逊的公司注销了怎么办 亚马逊中国卖家太多美国卖家怎么办 付款了!卖家不想卖了怎么办? 手机通讯录同步助手密码忘了怎么办 毕业生学位信息照片上传错了怎么办 报名计算机二级照片上传很慢怎么办 网上报名时照片上传错了怎么办 特岗教师报名时照片上传模糊怎么办 百家号申请过新手被拒绝三次怎么办 6岁儿童个子高不长肉体形瘦怎么办 网页游戏加载完毕卡了不动怎么办 小番茄未成熟下面就坏掉是怎么办 千牛快捷短语界面变得好宽怎么办 申请大王卡手机号填错了怎么办 别人盗用我手机号申请微信号怎么办 淘宝支付宝里没钱了买家退款怎么办 如果外包把员工社保忘交了怎么办 外包工人没有和包工头的证据怎么办 试用期辞职公司给交的社保怎么办 单位给交员工不想交社保怎么办 淘宝收不到卖家的信息怎么办 不小心把微信聊天记录删掉了怎么办 不小心把打印机驱动删除了怎么办 蓝牙不小心点到忽略此设备怎么办 千牛工作台无线开店确认不了怎么办 开通诚信通后营业执照注销了怎么办 淘宝标的货跟发的不一样怎么办 wps表格里单元之间重叠了怎么办 淘宝店铺停了一段时间没了怎么办 转转买家收货为敲诈卖家怎么办 淘宝被投诉盗用官网图片怎么办 淘宝订单买下后卖家告知无货怎么办 盗图被删除还是待处理违规该怎么办 如果买家说你们的买家秀一样怎么办 花呗唤起安全核身验证失败怎么办 淘宝买东西花呗分期额度不够怎么办 支付宝余额支付额度已达上限怎么办 我是淘宝卖家遇到无良买家怎么办 我的保证金被淘宝当做违约金怎么办 淘宝顾客不想退货申请仅退款怎么办 被买家提供证明说我卖假货怎么办