- 博客(8)
- 收藏
- 关注
原创 堆排序
**基本思想:**利用大顶堆或者小顶堆的性质,将顶层移走,剩余的继续构造一个堆。重复这个过程得到有序的数组。以大顶堆为例:(堆为一个完全二叉树)首先我们需要一个在堆内进行调整的函数,确保堆内的parent大于它的两个孩子节点。//heap[]为保存堆的数组//其中孩子节点与parent的关系为孩子结点的下标(i-1)/2向下取整为parent的下标//n为元素的个数//i为当前下标/...
2020-02-29 03:59:08 146
原创 希尔排序
基本思想: 设定间隔分组,保证基本有序,每趟尽量把小的关键字排前面,大的关键字往后放。是一种对简单插入操作的改进。void ShellSort(List *L){ int i, j; int increment = L->length; while(increment > 1){ increment = increment / 3 +...
2020-02-29 00:52:13 101
原创 O(n^2)的排序(冒泡,选择,插入排序)
1、冒泡排序基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序为止。//基础冒牌排序void BubbleSort(List *L){ int i, j; for(i = 1; i < L->length; ++i){ for(j = L->length; j >= i; --j){ if(L...
2020-02-28 04:01:37 135
原创 哈希表(散列表)查找
一、原理:存储位置与关键字一一映射。散列技术是在记录的存储位置和它的关键字之间建立起一个确定的对应关系f,使每个关键字key对应一个存储位置f(key)。f为散列函数,又称哈希函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间成为散列表/哈希表。二、散列函数构造方法:1.直接定址法直接用key值的某个线性函数当地址。f(key) = a * key + b简单,不...
2020-02-27 02:29:35 324
原创 平衡二叉树
原理:每当构建一个二叉树时,先检查插入是否破坏了平衡性。若是,则找出最小不平衡子树,进行对应的操作。//树结构定义typedef struct BiTnode { int data; int bf; struct BiTnode* lchild, * rchild;}BiTnode, *BiTree;左旋即将最小不平衡子树的根节点变为其右孩子的左子树。原右孩子的左子树变为原根节点的...
2020-02-25 23:09:35 117
原创 斐波那契查找
利用斐波那契数列的黄金分割原理对二分和插值查找的改进二分,插值查找:https://blog.csdn.net/TinnCHEN/article/details/104437976首先我们定义一个斐波那契数列F = {0,1,1,2,3,5,8,13,21,34…}int Fibonacci_Search(int *a,int n, int key){ int low, high,...
2020-02-23 00:00:45 131
原创 插值查找(改进版的二分/折半查找)
这两种查找方式都是针对于静态查找,同时不适用于需要频繁增删的数组,因为维护数据的序会是一个很大的负担。同时插值查找也不适用于分布极端不均匀的数组二分/折半查找int binary_search(int *a, int n, int key){ int low, high, mid; low = 1; high = n; while(low <= high)...
2020-02-22 03:44:54 229
原创 数组中差为K的对数/K-diff Pairs in an Array(C++)
Problem:Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both n...
2020-02-19 03:50:00 344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人