算法
John_Venn
这个作者很懒,什么都没留下…
展开
-
快速排序及其改进
快速排序的平均时间复杂度为O(N logN),空间复杂度O(logN)。在待排序的数组正好是正序或逆序时,时间空间复杂度为O(n^2),达到最快时间复杂度。1.传统快速排序1.荷兰国旗问题及三向切分将小于num的数放在左边,大于num放在右边,等于num放在中间3.随机快速排序 //随机快速排序 private void quickSort(int[] a){ if (a ...原创 2018-03-14 17:51:32 · 378 阅读 · 0 评论 -
堆排序
1.完全二叉树的性质从顶至下将完全二叉树从0按层开始标号标号为i的父节点标号为(i-1)/2,左子节点标号 2 * i + 1, 右子节点 标号2 * i + 22. 堆的建立堆的本质就是一棵完全二叉树,可以利用完全二叉树的性质建立堆。堆数据结构上是一棵树,实际上是以数组的形式存储的。可以自底向上和自顶向上的两种方式进行建堆。自顶向下是节点从上至下下沉,自底向上是节点从下至上上浮。3.优先级队列优...原创 2018-03-14 18:27:57 · 221 阅读 · 0 评论 -
排序的稳定性
1.稳定性稳定:冒泡排序、插入排序、归并排序不稳定:选择排序、快速排序、堆排序2.工程中的综合排序基础类型:快排类:归并排序(保证稳定性)数组长度很短(不管是什么类型):插入排序一般长度<60直接插入排序,插入排序常数项很低快排和归并划分子数组小于60时,直接插入排序3.补充归并排序,内部缓存法(空间复杂度O(1))01 stable sort(稳定的快速排序)...原创 2018-03-15 12:25:38 · 321 阅读 · 0 评论 -
求数据流的中位数
使用两个堆,大顶堆存放较小的那一半数据,小顶堆存放较大的那一半数据。数据先进大顶堆,后进小顶堆。则数据量为奇数时,中位数为大顶堆的堆顶;数据量为偶数时,中位数为大顶堆和小顶堆堆顶的平均数。代码如下:import java.util.*;public class Solution { private int count = 0; private PriorityQueue<...原创 2018-03-16 21:32:58 · 497 阅读 · 0 评论 -
矩阵问题
1.转圈打印矩阵 public ArrayList<Integer> printMatrix(int[][] matrix) { ArrayList<Integer> list = new ArrayList<>(); int top_left_x = 0, top_left_y = 0, b...原创 2018-02-16 18:26:31 · 315 阅读 · 0 评论 -
链表问题
1. 判断一个链表是不是回文结构2.将单向链表按某数划分成左边小、中间相等、右边大的形式3.复杂链表的复制4.如何判断两条链表是否交叉,如何找到交叉的第一个节点?假设链表可能有环可能无环。...原创 2018-03-19 00:22:55 · 221 阅读 · 0 评论