zoukankan
html css js c++ java
PHP实现常见排序算法
每年总是要隔三差五的看数据结构,每次总是觉得自己很多东西没有学好,唉。今天贴刚使用php实现4的排序算法,另外堆排序和归并排序没有写。
其他数据结构知识使用php的实现参考我以前写的文章:
http://blog.csdn.net/heiyeshuwu/archive/2006/06/10/787426.aspx
插入排序、选择排序、,冒泡排序,时间复杂度貌似都是 O(N2),所以实际意义不大,在实际测试中,我对3000个数组元素进行,这三种排序算法都需要花费80秒左右,而快速排序只需要8秒,差距确是比较大,有兴趣的可以自己测试一下。
<?
//插入排序(一维数组) function insert_sort($arr){ $count = 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; }
//选择排序(一维数组) function select_sort($arr){ $count = count($arr); for($i=0; $i<$count; $i++){ $k = $i; for($j=$i+1; $j<$count; $j++){ if ($arr[$k] > $arr[$j]) $k = $j; if ($k != $i){ $tmp = $arr[$i]; $arr[$i] = $arr[$k]; $arr[$k] = $tmp; } } } return $arr; }
//冒泡排序(一维数组) function bubble_sort($array){ $count = count($array); if ($count <= 0) return false; for($i=0; $i<$count; $i++){ for($j=$count-1; $j>$i; $j--){ if ($array[$j] < $array[$j-1]){ $tmp = $array[$j]; $array[$j] = $array[$j-1]; $array[$j-1] = $tmp; } } } return $array; }
//快速排序(一维数组) 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); }
?>
<?
//插入排序(一维数组)
function insert_sort($arr
){
$count = 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
;
}
//选择排序(一维数组)
function select_sort($arr
){
$count = count($arr
);
for($i=0; $i<$count; $i++
){
$k = $i
;
for($j=$i+1; $j<$count; $j++
){
if ($arr[$k] > $arr[$j
])
$k = $j
;
if ($k != $i
){
$tmp = $arr[$i
];
$arr[$i] = $arr[$k
];
$arr[$k] = $tmp
;
}
}
}
return $arr
;
}
//冒泡排序(一维数组)
function bubble_sort($array
){
$count = count($array
);
if ($count <= 0) return false
;
for($i=0; $i<$count; $i++
){
for($j=$count-1; $j>$i; $j--
){
if ($array[$j] < $array[$j-1
]){
$tmp = $array[$j
];
$array[$j] = $array[$j-1
];
$array[$j-1] = $tmp
;
}
}
}
return $array
;
}
//快速排序(一维数组)
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
);
}
?>
查看全文
相关阅读:
今天封装了一下 gridview 在没有数据的时候显示表头 并且提示数据为空的方法
动态绑定treeview的方法
Android为拨号盘dialer定制声音DTMF Tones
如何降低android应用程序的耗电量
DTMF双音多频按键信号的定义
ant 实现批量打包android应用
android网络编程——使用Android中的网络连接
Android Service被关闭后自动重启,解决被异常kill 服务
android中阿拉伯文研究
android网络编程——http get
原文地址:https://www.cnblogs.com/gxldan/p/4066688.html
最新文章
关于foreach循环
不怕有错误,就怕不改啊!关于Undefined index
MYSQL命令行基本操作
python之文件操作
python之元组操作
64位windows server2003系统下32位excel连接mysql数据库的方法
cpp沉思录笔记1类设计者的核查表
用mysql workbench导出mysql数据库关系图
python之字典操作
python之mysql数据库操作
热门文章
python之列表操作
VS2005空白项目添加打印信息的方法
今天 treeview动态绑定菜单 进行权限维护的时候 发现treeview节点能点击的问题处理
调了 好几天的问题 treeview 的js 处理复选框之间的关系,选中子框父框自动选中,单独执行 没问题 放到框架页里 就有问题
今天想 做了一下 gridview 在没有数据的情况下 也能显示表头呢 虽然 没有封装 还是面向过程的 不过 还是做出来了
今天 父亲 让我给家里做一个彩票 输入和值后 自动输出和值里的所有号码的控制台程序 有点问题 就是比较慢,还有 不能重复输入,但总算实现了。
封装了 一个冒泡法排序
今天 给父亲说要 统计大乐透玩法 不同和值下的 不同结果 做成b/s的;中间发现了很多问题 但是解决了
昨天 写了 一个oracle 数据库备份的脚本 .bat 文件的 更新一下 并删除7天前的所有备份
终于 解决用treeview 做权限维护的时候 发现被选中的节点的值 不能获得 原来 就是一个属性 设置错了
Copyright © 2011-2022 走看看