算法
文章平均质量分 69
Stanley Shi
这个作者很懒,什么都没留下…
展开
-
随机数生成_srand/random
通过系统函数srand/random设置随机种子,产生随机数,功能比较简单。 class Random { public: Random() { srand(GetNS()); } Random(unsigned int seed) { srand(seed); } virtual ~Random() {} long Get()原创 2015-09-24 17:28:25 · 361 阅读 · 0 评论 -
排序_插入排序
以下是插入排序功能实现。(效率低O(n^2),大量数据移动) void Insert(int array[], size_t n) { int temp; size_t i,j; for (i = 1; i < n; i++) { temp = array[i]; for (j = i-1; j >= 0; j--) {原创 2015-10-09 06:51:03 · 133 阅读 · 0 评论 -
排序_快速排序
以下是快速排序功能实现。(分治策略,平均时间复杂度O(NlogN)) typedef int key_t; #define swap(v1,v2) do{key_t tmp=v1;v1=v2;v2=tmp;}while(0) void QuickSort(key_t array[], int start, int end) { int next_end = end; i原创 2015-10-07 00:07:53 · 204 阅读 · 0 评论 -
排序_简单选择排序
以下是简单选择排序算法实现,效率低O(n^2)。 typedef int key_t; #define swap(a,b) do{key_t tmp=a;a=b;b=tmp;}while(0) void SimpleSelectSort(key_t array[], size_t n) { size_t swap_index; for (size_t i =原创 2015-10-07 21:37:45 · 181 阅读 · 0 评论 -
树_最小堆
以下是最小堆添加节点和删除最小节点的功能实现。 特点: A.完全二叉树(降低高度)。 B.充分利用数组存储,通过下标可以直接找到父子关系。 C.插入新元素和/删除最小元素不需要大量移动,最坏只需要进行logN次重新调整即可。 D.获取最小值时间复杂度O(1)。 E.操作过程适合实现优先队列。 F.堆排序时间复杂度O(NlogN)。 class Heap { public原创 2015-10-05 13:46:15 · 255 阅读 · 0 评论 -
树_二叉排序树
以下是二叉排序树的基本功能实现,由于其时间复杂度可能退化成O(n)等同线性查找,不能保证树的平衡,因此添加、删除、查找操作根据给定的不同数据集会有不同的效率(思想类似快速排序),使用平衡树可以使时间复杂度提高到O(logN). class BSTree { public: typedef int key_t; struct node { key_t key原创 2015-09-26 20:29:44 · 150 阅读 · 0 评论 -
查找_二分查找
以下是二分查找的功能实现,要求有序数组,时间复杂度O(logn),应该是有序数组查找的首选了。 bool BinarySearch(key_t sortArray[], int n, key_t key) { int index1 = 0, index2 = n, mid; while(index1 <= index2) { mid = (index1 + index2)/2;原创 2015-09-28 22:21:21 · 190 阅读 · 0 评论 -
位操作_求二进制中1的个数
以下是求x中二进制1的个数的两种方法,第一种是比较常规的逻辑进行循环移位直至为0结束。第二种效率更高些,不需要循环移位,每次只去掉x中的最后一位。(x&(x-1)可实现去除掉最后一位1。另外如果数中1的个数只有一个,那么这个数是2的n次方。) uint8_t Bit1Count_A(unsigned long x) { uint8_t count = 0;原创 2015-09-28 09:45:02 · 224 阅读 · 0 评论 -
排序_冒泡排序
以下是冒泡排序的功能实现,时间复杂度O(n^2),算法本身的性能不高。 #define ASC 1 #define DESC 0 #define SWAP(ktype,k1,k2) do { ktype tmp=k1; k1=k2; k2=tmp; }while(0) typedef int key_t; int Compare(key_t k1, key_t k2) { if原创 2015-09-28 13:42:41 · 166 阅读 · 0 评论