随笔分类 - 算法设计
摘要:求给定输入中第k大的数的算法。这是一个常见面试题,通常的解法也很明显,使用类似快排的思想。每趟运行,把数组的值分成两部分,一部分比pivot大,一部分比pivot小,因为我们知道pivot在数组中的位置,所以比较k和pivot的位置就知道第k大的值在哪个范围,我们不断的进行recursion, 直到...
阅读全文
摘要:randomized_select函数的期望运行时间是Θ(n),这里假设输入数据都是互异的.它返回数组A[p, r]中第i小的元素.该函数最坏情况运行时间为Θ(n2),即使是找最小元素也是如此,以为在每次划分时可能极不走运地总是按余下的元素中最大的来进行划分,而划分操作需要Θ(n)时间.我们也将看到...
阅读全文
摘要:#include typedef struct BinaryTreeNode{ int key; struct BinaryTreeNode *ltree; struct BinaryTreeNode *rtree;}BinaryTreeNode;static BinaryTree...
阅读全文
摘要:1. 问题描述:先序非递归建立一颗以二叉链表为存储结构的二叉树。例如建立如下所示的一颗二叉树 A / \ B E / \ / C D F ...
阅读全文
摘要:下面程序有几个地方注意一下,见注释. 1 #include 2 #include 3 4 /*以后写结构体,都使用该格式.即typedef标注.上下ListNode要相同.*/ 5 typedef struct ListNode 6 { 7 int key; 8 struct ...
阅读全文
摘要:#include #include #include void binary_num(int, int);int main( int argc, char* argv[] ) { int a = 30; binary_num(a, sizeof(a) * 8); print...
阅读全文
摘要:堆一个常见的应用:作为高效的优先队列. 我们可以在一个线性时间内将一个无序数组构造成一个最大堆,并且在O(lgn)的时间内调整堆.堆排序的时间复杂度为:O(nlgn). 1 1 #include 2 2 #include 3 3 4 4 void build_heap(...
阅读全文
摘要:1 #include 2 #include 3 4 void insert_sort(int data[], int); 5 6 int main(int argc, char *argv[]) 7 { 8 int i; 9 int data[6] = {5,3,7,10,...
阅读全文
摘要:#include #include void build_heap(int data[], int);void adjust_heap(int data[], int);void heap_sort(int data[], int);int sub_max_heap(int data[], int,...
阅读全文
摘要:#include #include #include void quick_sort(int data[], int, int);int partition(int data[], int, int);int main( int argc, char* argv[] ) { int data[8] ...
阅读全文