
数据结构与算法
为你挡风遮雨
这个作者很懒,什么都没留下…
展开
-
hashtable中解决冲突的方法
hashtable中解决冲突的方法线性探测使用hash函数计算出的位置如果已经有元素占用了,则向后依次寻找,找到表尾则回到表头,直到找到一个空位。开链每个表格(bucket)维护一个list,如果hash函数计算出的格子(bucket)相同,则按顺序存在这个list中。再散列发生冲突时使用另一种hash函数再计算一个地址,直到不冲突。二次探测使用hash函数计算出的位置如果已经有元素占用了,按照121^212、222^222、323^232…的步长依次寻找,如果步长是随机数序列,则称之为伪随原创 2021-06-30 17:01:16 · 454 阅读 · 0 评论 -
C++用vector容器实现堆的相关算法
C++用vector容器实现堆的相关算法#include <iostream>#include <algorithm>#include <vector>using namespace std;int main() { vector<int> v = {0, 1, 2, 3, 4, 5, 6}; make_heap(v.begin(), v.end()); // 以vector为底层容器构造大根堆(底层是完全二叉树) for (auto i :原创 2021-06-30 15:43:42 · 241 阅读 · 0 评论 -
用C++快速计算8位无符号二进制数中1的个数
求一个8位无符号二进制数中1的个数法一:对该数不断除以2后看其余数是否为1,并计算余数为1的次数#include<iostream>using namespace std;int countFunction(int x) { int result = 0; while (x) { if (x % 2 == 1) { result++; } x /= 2; } return result;}int main(){ int x = 196; int r原创 2021-06-08 08:53:08 · 1286 阅读 · 0 评论 -
用C++实现数组的二分查找算法
二分查找算法原理:在使用二分查找算法之前先要确定被查找的数组必须有序的,即确定待寻找的元素的范围是[low, high],然后逐步缩小范围直到找到或找不到该元素为止。具体做法是:先取数组中间位置(mid=(low+high)/2)的数据元素与给定值比较。若相等,则查找成功;否则,若给定值比该数据元素的值小(或大),则给定值必在数组的前半部分[low,mid-1](或后半部分[mid+1,high]),然后在新的查找范围内进行同样的查找。如此反复进行,直到找到数组元素值与给定值相等的元素或确定数组中没有待查原创 2021-06-05 21:41:48 · 2447 阅读 · 0 评论 -
十大排序算法复杂度及稳定性分析和c++实现
排序分类按排序依据原则分类(普遍流行):各排序算法比较插入排序基本思想:边插入边排序,保证子序列中随时都是排好序的。按插入位置方法的不同分类:1)顺序法:直接插入排序 2)二分法:折半插入排序 3)缩小增量:希尔排序直接插入排序原理:从第二位数据开始, 当前数(第一趟是第二位数)与前面的数依次比较,如果前面的数大于当前数,则将这个数放在当前数的位置上,当前数的下标-1,直到当前数不大于前面的某一个数为止,直到遍历至最后一位元素。代码实现:#include<iostre原创 2021-06-03 18:27:14 · 339 阅读 · 1 评论