php的排序
2016-12-07 14:18
253 查看
PHP快速排序法代码实例:
<?php
//快速排序法封装函数
function quick_Sort($array){
//先判断是否需要继续进行,若所要排序数组只有一个元素或没有元素则不需要排序
$len = count($array);
if($len <= 1)
{
return $array;
}
//如果所给数组元素大于1个,需要排序
//选择数组第一个元素作为标尺
$key = $array[0];
//初始化两个数组
$left_array = array();//小于标尺的
$right_array = array();//大于标尺的
//遍历所给数组除了标尺外的所有元素,按照大小关系放入两个数组内
for($i=1;$i<$len;$i++){
if($array[$i]<$key){
//如果数组元素小于标尺则将该元素放入左数组
$left_array[] = $array[$i];
}else{
//如果数组元素大于标尺则将该元素放入右数组
$right_array[] = $array[$i];
}
}
//再分别对 左数组 和 右数组进行相同的排序处理方式
//递归调用这个函数,并记录结果
$left_array = quick_Sort($left_array);
$right_array = quick_Sort($right_array);
//合并左数组 标尺 右数组
//array_merge() 函数把两个或多个数组合并为一个数组。
//如果键名有重复,后面的键名的值覆盖前面的键名的值。如果数组是数字索引的,则键名会以连续方式重新索引。
//语法 array_merge(array1,array2,array3...)
return array_merge($left_array,array($key),$right_array);
}
$sortarray = array(13,89,23,9,19,88,56,78,34,69,10,14);
print_r(quick_Sort($sortarray));
?>
代码实现:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function bubbleSort($arr)
{
$len=count($arr);
//该层循环控制 需要冒泡的轮数
for($i=1;$i<$len;$i++)
{ //该层循环用来控制每轮 冒出一个数 需要比较的次数
for($k=0;$k<$len-$i;$k++)
{
if($arr[$k]>$arr[$k+1])
{
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$k];
$arr[$k]=$tmp;
}
}
}
return $arr;
}
代码实现:
function selectSort($arr) {
//双重循环完成,外层控制轮数,内层控制比较次数
$len=count($arr);
for($i=0; $i<$len-1; $i++) {
//先假设最小的值的位置
$p = $i;
for($j=$i+1; $j<$len; $j++) {
//$arr[$p] 是当前已知的最小值
if($arr[$p] > $arr[$j]) {
//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
}
代码实现:
function insertSort($arr) {
$len=count($arr);
for($i=1, $i<$len; $i++) {
$tmp = $arr[$i];
//内层循环控制,比较并插入
for($j=$i-1;$j>=0;$j--) {
if($tmp < $arr[$j]) {
//发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
} else {
//如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
break;
}
}
}
return $arr;
}
<?php
//快速排序法封装函数
function quick_Sort($array){
//先判断是否需要继续进行,若所要排序数组只有一个元素或没有元素则不需要排序
$len = count($array);
if($len <= 1)
{
return $array;
}
//如果所给数组元素大于1个,需要排序
//选择数组第一个元素作为标尺
$key = $array[0];
//初始化两个数组
$left_array = array();//小于标尺的
$right_array = array();//大于标尺的
//遍历所给数组除了标尺外的所有元素,按照大小关系放入两个数组内
for($i=1;$i<$len;$i++){
if($array[$i]<$key){
//如果数组元素小于标尺则将该元素放入左数组
$left_array[] = $array[$i];
}else{
//如果数组元素大于标尺则将该元素放入右数组
$right_array[] = $array[$i];
}
}
//再分别对 左数组 和 右数组进行相同的排序处理方式
//递归调用这个函数,并记录结果
$left_array = quick_Sort($left_array);
$right_array = quick_Sort($right_array);
//合并左数组 标尺 右数组
//array_merge() 函数把两个或多个数组合并为一个数组。
//如果键名有重复,后面的键名的值覆盖前面的键名的值。如果数组是数字索引的,则键名会以连续方式重新索引。
//语法 array_merge(array1,array2,array3...)
return array_merge($left_array,array($key),$right_array);
}
$sortarray = array(13,89,23,9,19,88,56,78,34,69,10,14);
print_r(quick_Sort($sortarray));
?>
1. 冒泡排序
思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。代码实现:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function bubbleSort($arr)
{
$len=count($arr);
//该层循环控制 需要冒泡的轮数
for($i=1;$i<$len;$i++)
{ //该层循环用来控制每轮 冒出一个数 需要比较的次数
for($k=0;$k<$len-$i;$k++)
{
if($arr[$k]>$arr[$k+1])
{
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$k];
$arr[$k]=$tmp;
}
}
}
return $arr;
}
2. 选择排序
思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。代码实现:
function selectSort($arr) {
//双重循环完成,外层控制轮数,内层控制比较次数
$len=count($arr);
for($i=0; $i<$len-1; $i++) {
//先假设最小的值的位置
$p = $i;
for($j=$i+1; $j<$len; $j++) {
//$arr[$p] 是当前已知的最小值
if($arr[$p] > $arr[$j]) {
//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
}
3.插入排序
思路分析:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。代码实现:
function insertSort($arr) {
$len=count($arr);
for($i=1, $i<$len; $i++) {
$tmp = $arr[$i];
//内层循环控制,比较并插入
for($j=$i-1;$j>=0;$j--) {
if($tmp < $arr[$j]) {
//发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
} else {
//如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
break;
}
}
}
return $arr;
}
相关文章推荐
- 修改PHP 上传文件大小限制
- PHP 连接 MySQL
- 【Swoole】当SWOOLE遇上PHP
- Serv-U FTP Server 中文版 11.0.0.4安装及使用说明
- php数组(array)输出的三种形式详解
- php 函数随记
- TP中手动加载类库
- PHP each() 函数
- 10个最好的免费FTP客户端
- PHP 过滤器
- PHP session
- PHP的几种排序方法
- PHP cookie
- PHP 文件上传
- php内核学习(列出地址,以供自己学习)
- Zabbix的安装与部署---问题处理(php65.6.28 mysqli 报错误 处理)
- JMeter学习-035-JMeter调试工具之二---Debug PostProcessor
- PHP中PSR-[0-4]规范
- PHP源码分析 - PHP-FPM定时事件
- PHP练习