读书——编程珠玑
文章平均质量分 69
cd2108006026
WHAT
展开
-
位图排序
大概是空间换时间的思想,用一个bit标示一个数字;关于产生前N个数的随机排列的方法需要注意~ #include #include #include #define N 1000000unsigned int Rand(int low, int high){ if ( low == high ) return low; return lo原创 2010-03-13 19:34:00 · 535 阅读 · 0 评论 -
产生K个小于n的非负整数,并且顺序也是随机打乱的
#include #include #include #define N 100void Swap( int * a, int * b){ int tmp = *a; *a = *b; *b = tmp;}void Input(int a[] , int k){ srand(time(0)); int i; for ( i = 0;原创 2010-03-13 19:47:00 · 1006 阅读 · 0 评论 -
优先级队列 (小根堆)
#include #include #include using namespace std;// 小根堆template class PriQueue{ T * queue; int cnt;public: PriQueue() : queue ( NULL ), cnt(0) { queue = new T[N](); } ~Pri原创 2010-03-20 16:52:00 · 1487 阅读 · 1 评论 -
第1二分查找
其实是传统二分查找的一点变形:需要找到数组中出现的第一个元素。比如数组元素是 1 2 2 2 3 4 5查找2的话,返回数组下标为1,而不是2或者3 # include int FirstBinSearch(int a[], int n, int key){ int l = 0, r = n-1; int ret = -1; while( l原创 2010-03-17 14:21:00 · 572 阅读 · 0 评论 -
最大子序列
要求: 一个整数数组,可能有负数;求它的最大子序列和;如果都是负数,那么最大子序列和定义为最大的那个元素值; 1.很容易想到这个平方算法:int MaxSequence(int a[], int n) // n * n{ int max = a[0]; int sum ; int i, j; for ( i=0; i<n; ++i) { sum = 0翻译 2010-03-19 20:01:00 · 503 阅读 · 0 评论 -
快速选择——寻找第k小的数
据KNUTH证明,此方法是线性的。。。不理解。。。#include #include #include #include #define N 10void Swap( int * a, int * b){ int tmp = *a; *a = *b; *b = tmp;}int Partion(int a[], int n, int k)原创 2010-03-21 20:38:00 · 644 阅读 · 0 评论