博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法(二):分而治之
阅读量:5885 次
发布时间:2019-06-19

本文共 1987 字,大约阅读时间需要 6 分钟。

算法篇的文章主要为对"图解算法"一书的记录与总结

分而治之

分而治之(divide and conquer, D&C),一种著名的 **递归式** 解决问题的方法.快速排序中便使用到了该方法;D&C的工作原理:    - 找出简单的基线条件;    - 确定如何缩小问题的规模,使其符合基线条件复制代码

分而治之的例子

java实现

/**     * 获取符合条件的正方形的边长     *     * @param height 矩形的长度     * @param width  矩形的宽度     * @return     */    public int getValue(int height, int width) {        //获取矩形长对宽的取余        int remainder = height % width;        if (remainder ==0) {//这便是递归的基线条件,成立则退出递归,避免死循环            //说明此时长度为宽度的整数n倍,宽度即为符合正方形的边长            return width;        }        //递归调用,以最长边为新的矩形的长度        return getValue(width,remainder);    }复制代码

快速排序案例

对数组Integer[] array = new Integer[]{5, 4, 1, 5, 7, 6, 2, 3};进行从小到大排序;

用分而治之的理念,先确认出递归的基准条件;对排序算法来说,最简单的数组就是空数组或者只包含一个元素的数组,因为这种情况下,只需要返回原数组,根本不用进行排序。所以基线条件就是:数组为空或者只包含一个元素。

代码实现

/**     * 快速排序     *     * @param array 需要进行排序的数组     * @param start 需要进行排序的数组的起始索引     * @param end   需要进行排序的数组的结束索引     */    private void quickSort(Integer[] array, int start, int end) {        if (start < end) {            //获取进行分区的基准值索引            int pivotIndex = partition(array, start, end);            Log.d("yy", "基准值索引:" + pivotIndex);            //对基准左右2个分区再次进行递归排序            quickSort(array, start, pivotIndex - 1);            quickSort(array, pivotIndex + 1, end);        }    }    /**     * 获取基准值索引位置     *     * @param array     * @param start     * @param end     * @return     */    int partition(Integer[] array, int start, int end) {        // 基准值大小( pivot)        int pivot = array[start];        if (start < end) {            while (start < end) {                //从右往左查找比pivot基准值小的数                while (start < end && array[end] >= pivot) {                    end--;                }                array[start] = array[end];                //从左往右查找比pivot基准值小的数                while (start < end && array[start] <= pivot) {                    start++;                }                array[end] = array[start];            }        }        array[start] = pivot;        return start;    }复制代码

图解

转载地址:http://uqlix.baihongyu.com/

你可能感兴趣的文章
什么是单链表插入排序?
查看>>
mycncart 商品筛选 filter 模组设定教程
查看>>
【转】杰奇 jieqi 多线程自动采集同步源站 python源码
查看>>
Lucene6.0学习笔记——查看分词结果
查看>>
tomcat端口配置规范
查看>>
ubuntu 下crontab
查看>>
一步步安装nginx搭建流媒体服务器
查看>>
部署keepalived
查看>>
Android------底部导航栏BottomNavigationBar
查看>>
用memcached做实时分页缓存
查看>>
java运算符
查看>>
《Genesis-3D游戏引擎系列教程-高级篇》1:后期效果
查看>>
Jquery基本操作
查看>>
WM_COMMAND产生的条件
查看>>
http响应Last-Modified和ETag
查看>>
MySQL索引类型一览 让MySQL高效运行起来
查看>>
Linux下启动停止查看杀死Tomcat进程
查看>>
bt分析之bt种子发布---做种(2)
查看>>
makefile(一)makefile文件组成
查看>>
我的友情链接
查看>>