文档章节

排序 算法

沉淀岁月
 沉淀岁月
发布于 2015/07/18 00:09
字数 595
阅读 4
收藏 0
效率比较:冒泡<选择<插入<快速
 
4:快速排序

/**
 * 随便取一个数,每循环一次则把比他小的放到左边,比他大的放到右边,递归完成
 * @param array $seq
 * @return array
 */
function quicksort($seq) {
    if (count($seq) > 1) {
        $k = $seq[0];
        $x = array();
        $y = array();
        $_size = count($seq);      //do not use count($seq) in loop for.
        for ($i=1; $i<$_size; $i++) {
            if ($seq[$i] <= $k) {
                $x[] = $seq[$i];
            } else {
                $y[] = $seq[$i];
            }
        }
        $x = quicksort($x);
        $y = quicksort($y);
        return array_merge($x, array($k), $y);
    } else {
        return $seq;
    }
}
 
3:插入排序
 
$arr = array(3,2,1);
//把数组的前半部分看做是有序的,后面的不断的往前面插入
function insert_sort(&$arr)
{
    //先默认下标为0 这个数已经是有序
    for($i=1;$i<count($arr);$i++)
    {
        //$insertValue 是准备插入的数
        $insertValue = $arr[$i];
        //先准备和$insertIndex比较
        $inserIndex = $i-1;
        
        //如果满足这个条件,说明我们没有找到合适的位置、
        
        while($inserIndex>=0 && $insertValue<$arr[$inserIndex])
        {
            //同时把数相应往后面移动
            $arr[$inserIndex+1] = $arr[$inserIndex];
            $inserIndex--;
        }
        
        //插入(这时就给$insertValue找到适当的位置)
        $arr[$inserIndex+1] = $insertValue;//之所以+1 是因为 $inserIndex 是插入的前一个数,即每次和他比较的那个数
    }
}

insert_sort($arr);

print_r($arr);
2:选择排序
$arr = array(1,2,3);
/**
 * 取一个数依次和后面的做比较,记录本次的最小值,然后交换位置
 * 
 */
function select_sort(&$arr)
{
    $nums = count($arr)-1;//外层循环次数
    $temp = 0;//交换变量用的临时变量
    for($i=0;$i<$nums;$i++)
    {
        $minValue = $arr[$i];//假设$i就是最小数
        $minIndex = $i;     //记录我认为的最小数的下标
        //每排好一个,以后就可以少循环一回
        for($j=$i+1;$j<$nums;$j++)
        {
            if($minValue>$arr[$j])
            {
                $minIndex = $j;
                $minValue = $arr[$j];
            }
        }
        
        //交换位置
        $temp = $arr[$i];
        $arr[$i] = $arr[$minIndex];
        $arr[$minIndex] = $temp;
    }
}

select_sort($arr);
print_r($arr); 
 
 
1.冒泡排序
 
$arr = array(3,2,1);
//外层每循环一次则找出一个最大值,放到后面,所以里层的循环就可以减少一次

function bubble_sort(&$arr)
{
   $flag = false;

   $nums = count($arr)-1;//外层循环次数$temp = 0;//变量交换位置
   for($i=0;$i<$nums;$i++)
    {
        //每排好一个,以后就可以少循环一回
        for($j=0;$j<$nums-$i;$j++)
        {
            if($arr[$j]>$arr[$j+1])
            {
                //交换位置
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;

                $flag = true;//以次来判断是否进入过次层,如果没有进入过,说明本来就是个有序的,无需进行排序了
            }
        }

        if(!$flag){
            //已经排好了
            break;
        }else{
            $flag = false;
        }

    }
}

bubble_sort($arr);

print_r($arr);


© 著作权归作者所有

共有 人打赏支持
上一篇: 获取文件后缀名
下一篇: 服务端口汇总
沉淀岁月
粉丝 27
博文 257
码字总数 91615
作品 0
朝阳
高级程序员
私信 提问
排序算法篇_选择排序法

image   选择排序(Selection Sort)也是比较简单的排序算法,思路也比较直观。选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。 选择排序算法 选择排序算法通过选择和交...

一笑小先生
2018/01/30
0
0
十大经典排序算法动画解析和 Java 代码实现

排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序。 内部排序是数据记录在内存中进行排序。 而外部排序是因排序的数据很大,一次不能容纳全部的排序记...

01/09
0
0
涨姿势,图文带你了解 8 大排序算法

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有...

Java架构
2018/07/25
0
0
排序算法篇_冒泡排序法

image   冒泡排序法(Bubble Sort)是所有排序算法中最简单、最基本的一种。冒泡排序法的思路就是交换排序,通过相邻数据的交换来达到排序目的。 冒泡排序算法 冒泡排序算法通过多次比较和...

一笑小先生
2018/01/28
0
0
Java数据结构与算法(第三章简单排序)

如何排序? 这一章中主要是三个比较简单的算法:冒泡排序、选择排序和插入排序。计算机程序不能像人一样通览所有的数据。它只能根据计算机的“比较”操作原理,在同一时间内对来个数据项进行...

小风89
2015/10/22
142
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq

灰暗
44分钟前
1
0
Flink

flink HA部署 flink搭建,采用分布式部署方式,分别为A,B,C三个节点。其中A为master;A,B,C为worker。 本文使用的用户是hadoop用户(自己新建) 先决条件 Java 1.8.x or higher scala 自己使用...

-九天-
今天
2
0
数据中台和传统数仓的区别

中台系统把业务层同性的算法能力,服务能力,业务能力高度集成,有效组织 ,动态规划。更好的帮助上层业务。 今天就让我们看看关于数据中台的问答吧。 1 Q : 什么是数据中台? A : 数据中台是...

hblt-j
今天
4
0
Java在什么时候会出现内存泄漏

在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对...

群星纪元
今天
2
0
android 打开摄像头

private SurfaceHolder mHolder; private SurfaceView mSurfaceView; private Camera mCamera; mSurfaceView = (SurfaceView) this.findViewById(R.id.camsurfaceView1); mHolder = mSurface......

jingshishengxu
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部