递归与分治策略 递归:直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。 【例1】Fibonacci数列 【例2】Hanoi塔问题 分治:分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子 ...
分类:
编程语言 时间:
2019-10-12 01:36:31
阅读次数:
104
1.快速排序 1. 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想 分治法也确实实用。快速排序是一种既不浪费空间又可以快一点的排序算法。 2. 算法步骤 先从数列中取出一个数作为“基准”。 分区过程:将比这个“基准”大的数全放到“基 ...
分类:
编程语言 时间:
2019-10-05 14:22:19
阅读次数:
111
输入:一个待排序的数组A以及排序范围[left, right]。 输出:排序后的数组。 算法思想 快速排序算法属于分治算法:将数组的最后一个元素与其他元素进行一系列的比较与交换(划分),插入到这个元素在排好序后所处的位置。此时,该元素的左边的元素都比该元素小,右边的元素都比该元素大,则该问题被划分成 ...
分类:
其他好文 时间:
2019-10-02 18:45:26
阅读次数:
59
快排的时间复杂度O(nlogn)-O(N^2),空间复杂度为O(long2n)-O(N) 传统的快排与优化的快排的优化之处在于,传统的左边每次都保存着小于等于target即x的数值,包含着x,下次对左边的再次进行快排,还是要比较x, 优化的把 等于x放在中间,减少了重复元素的比较次数。 当origi ...
分类:
编程语言 时间:
2019-09-29 11:18:31
阅读次数:
101
今天复习数据结构,看到了快速排序算法,期间遇到了一点小问题为了以后避免出现在类似的问题,所以写了博记录一下。 首先掌握住快速排序算法的思想,以(6,1,2,7,9,3,4,5,10,8)为例。 int[] myarr = new int[] {6,1,2,7,9,3,4,5,10,8}; 首先需要选 ...
分类:
编程语言 时间:
2019-09-25 00:25:06
阅读次数:
112
定义 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 原理 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1)首先设定一个分界值, ...
分类:
编程语言 时间:
2019-09-06 01:24:46
阅读次数:
80
先来显示一下它的过程 1.给一个数组 10,22,3,90,8,6 从小到大 快速排序 2.选取它的第一个值作为flag 其他数组以此做排序,比它大的放右边,比它小的放左边。[10, 22, 3, 90, 8, 6] => { 3, 8, 6 } 10 { 22, 90 } 3.上一步得到的数组是{ ...
分类:
编程语言 时间:
2019-09-02 12:16:49
阅读次数:
110
一、数据结构 1.手写链表的基本操作(创建、新增节点、删除节点、销毁等) 2.链表的反转 3.如何判断一个链表有环 4.双向链表删除一个非头非尾节点 5.单向链表删除一个非头非尾节点 6.二叉树的前、中、后序遍历打印 7.STL中vector的内部实现原理 8.STL中vector与list的区别 ...
分类:
编程语言 时间:
2019-08-20 22:30:56
阅读次数:
139
算法思想 取待排序元素的区间端点作为作为界值,然后通过交换使得待排序元素中所有大于界值的元素位于界值的一侧, 所有小于界值的元素位于界值的另一侧,然后在对界值左右两侧的待排序元素使用同样的方法进行排序,直到下一 次待排序区间只有一个元素时,则表示所有的元素排序完成,可以看出这种排序方式使用了分而治之 ...
分类:
编程语言 时间:
2019-08-13 15:39:29
阅读次数:
96
function quickSort(arr = [3, 7, 20, 1, 10, 6, 15, 5, 12]) { if (arr.length <= 1) return arr const leftArr,rightArr = [], let current = null current = ...
分类:
编程语言 时间:
2019-07-28 14:17:56
阅读次数:
72