一、线性结构 1.1、数组 一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 最大的特点就是支持随机访问,但插入、删除操作也因此变得比较低效,平均情况时间复杂度为O(n)。 1、特性: 第一是线性表(Linear List)。顾名思义,线性表就是数据排成像一条线一样的结构。 ...
分类:
其他好文 时间:
2020-05-29 12:17:29
阅读次数:
58
二叉搜索树是一棵二叉树,其中它的每个内部节点都有一个相关的关键字,并有以下附加性质:任意节点中的关键字大于或等于该节点左子树中所有节点含有的关键字,并小于或等于该节点右子树中所有节点含有的关键字。 二叉搜索树作为符号表的实现基础,可以使得搜索、插入、选择和排序等符号表操作在平均情况下具有最快性能。 ...
分类:
其他好文 时间:
2020-04-26 12:34:15
阅读次数:
54
函数1 用来打印列表元素 函数2 每打印一个元素休眠1秒 这两个函数迭代整个列表一次,运行时间都是O(n) 实际上肯定函数1更快 c为算法固定时间量,称为常量。 比如函数1所需时间可能是10ms * n, 函数二是1s * n 但通常不考虑这个量 从简单查找和二分查找来看,简单查找一次10ms 二分 ...
分类:
编程语言 时间:
2020-04-06 15:38:49
阅读次数:
83
计数排序 基本思想 ? 计数排序对一定量的整数排序的速度非常快,一般快于其他排序算法。但计数排序局限性比较大,只限于对整数进行排序。 对于一个输入数组中的一个元素i,只要我们知道了这个数组中比i小的元素的个数x,那么我们就可以直接把i放到第(x+1)个位置,即i的索引为x(索引从0开始)。 算法步骤 ...
分类:
编程语言 时间:
2020-04-05 00:23:43
阅读次数:
85
背景 快速排序,是在上世纪60年代,由美国人东尼·霍尔提出的一种排序方法。这种排序方式,在当时已经是非常快的一种排序了。因此在命名上,才将之称为“快速排序”。这个算法是二十世纪的七大算法之一,平均情况下时间复杂度为Ο(nlogn),而且在O(nlogn)的情况下,实际的运算速度都要快于其他同时间复杂 ...
分类:
编程语言 时间:
2020-03-27 19:52:25
阅读次数:
51
概述:基于快排原理找到最小的K个元素,属于Top K问题。注意,使用快排原理找前K小问题不需要对整个数组进行O(nlogn)的排序。我们只要找K所在的区间进行递归调用,即每次只要对数据的一半进行递归调用,而不用对全部的数据进行递归调用,从而降低了时间复杂度。平均情况下,时间复杂度计算:n + n/2 ...
分类:
其他好文 时间:
2020-03-21 09:18:50
阅读次数:
62
算法思想 快速排序是基于冒泡排序的改进,是基于分治思想。 在待排序表L[1...n]中选取一个元素(base)作为基准,一次排序后将排序表划分两个部分L[1...k-1]和L[k+1...n],其中L[1...k-1]中的元素小于base,L[k+1...n]中的元素大于base,然后将base放到 ...
分类:
编程语言 时间:
2020-03-12 09:56:00
阅读次数:
61
由来 /**** 在一个无序的数组(array)中 查找变量 x 第一次出现的位置。如果没有找到,就返回 -1 ****/ // n 表示数组array的长度 int find(int[] array, int n, int x) { int i = 0; int pos = -1; for (; ...
分类:
编程语言 时间:
2020-02-09 09:29:27
阅读次数:
108
Heaps and Heapsort: 堆是一种快速访问最大优先级元素的数据结构,这是快速实现选择排序的基础,但是总体来说平均速度比快排要慢一点,不过其最坏情况和平均情况是差不多的。 首先是堆的定义,每个结点比它的孩子结点都小(所以父节点最小),或者每个结点都比它的孩子结点大(父节点最大),把A[1 ...
分类:
其他好文 时间:
2020-02-03 12:07:47
阅读次数:
112
目录 堆的概念要点算法分析 堆排序算法的总体情况 时间复杂度 算法稳定性完整参考代码 JAVA版本参考资料相关阅读 说明 堆的概念 在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿。 堆是一棵顺序存储的完全二叉树。 其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。 其中每个结 ...
分类:
编程语言 时间:
2020-01-16 10:30:47
阅读次数:
70