
数据结构与算法
哇哈哈水有点甜
这个作者很懒,什么都没留下…
展开
-
排序算法之——归并排序
利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题,然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案“修补”在一起,即分而治之)优势:对于巨大的数据集,如果要求Top N这种操作,由于不能把数据一次性读进内存,快排无法发挥作用,这时可以采取归并的方法,将大的数据集分成多个小的数据集,然后分...原创 2019-06-04 10:07:15 · 195 阅读 · 0 评论 -
排序算法之——快速排序,以及求数组中第k小的值
假设有一个如下数组,对其进行快速排序[7,5,11,0,10,5,17,15]思路:选一个中间值,把数组中比它小的元素放到左边,比它大的元素放到右边,这时形成三个子数组,分别是中间值,比它大的数和比它小的数,然后对前后两个数组进行递归最好时间复杂度:O(NlogN)最差时间复杂度:O(N^2)代码实现(java):采用哨兵的概念,设数组最后一个元素为哨兵public static vo...原创 2019-06-04 10:12:37 · 926 阅读 · 0 评论 -
排序算法之——桶排序
概念:桶排序是将数组中的元素放到一个一个的桶中,每个桶(bucket)代表一个区间,里面可以承载一个或者多个元素。然后将桶内的元素进行排序,再按顺序遍历桶,输出桶内元素。时间复杂度:O(n+m+n(logn-logm)) (n代表数组长度,m代表桶数,当n=m时,时间复杂度为O(n))空间复杂度:O(m+n)缺点:如果数组中除了最后一个元素全部都在第一个桶中,那么查询的时间复杂度会退化为O(...原创 2019-06-04 10:18:42 · 298 阅读 · 0 评论 -
排序算法之——选择排序
排序原理:从数组的第一个元素开始,每次遍历数组找出一个最小值放在最左侧,第二次从第二个元素开始,依次类推,直到起始元素为数组的倒数第二个元素时,直接和最后一个元素比较,较小值放左边,完成排序时间复杂度:O(N^2)空间复杂度:O(1)代码实现(java):public static void main(String[] args) { int[] arr = {3,5,1,2,4...原创 2019-06-04 10:20:48 · 314 阅读 · 0 评论 -
排序算法之——冒泡排序
排序原理:(以升序排列为例)相邻两元素进行比较,如过左侧元素大于右侧元素,则进行交换,每完成一次循环就将最大元素排在最后,下一次循环是将其它的数进行类似操作。(即每进行一次循环,待排序的数组就少一个元素)时间复杂度:O(N^2)空间复杂度:O(1) 多增加了一个临时元素tmp代码实现(java)public static void main(String[] args) { int...原创 2019-06-04 10:22:45 · 116 阅读 · 0 评论 -
排序算法之——计数排序
原理:找到数组中数值最大的元素,(如这里的8),创建一个长度为最大元素+1的临时数组,(这里为9),这样就可以把原始数组转换为:以原始数组元素值为下标,相同元素个数为值的临时数组如数组 [8,4,2,3,5] 经过转换后形成了 [0,0,1,1,1,1,0,0,1] 的数组,如下图:但是在一些情况下,这样创建数组是不合适的,如[90,96,92,93,95] ,这就需要创建一个长度为97的...原创 2019-06-04 10:45:44 · 154 阅读 · 0 评论 -
二分查找
前提:二分查找的前提是数组内的元素必须是有序的思想:找到数组的中间值,和需要查找的值进行对比:如果中间值等于查找值,直接返回中间值下标;如果中间值大于查找值,则递归向左边查找;如果中间值小于查找值,则递归向右边查找,直到找完所有的元素递归的结束条件——数组的开始下标 > 结束下标扩展:如果一个数组中有多个查找值,需要返回一个元素值等于查找值的下标的数组,在查到第一个元素等于查找值后,分...原创 2019-06-04 10:48:30 · 203 阅读 · 0 评论