算法导论
nedved09fy
这个作者很懒,什么都没留下…
展开
-
练习 2.3-7 求一个元素是否为数组中两个数的和
题目: 给出一个O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断S中是否存在有两个其和等于x的元素。 思路: 首先采用合并排序算法对数组进行从小到大排序(复杂度为O(nlgn)) 然后从左→右扫描数组S(时间复杂度为O(n)),对每个a[i],在数组中用二分查找算法寻找v-a[i](时间复杂度为O(lgn)),则总时间复杂度为O(nlgn) #inclu原创 2012-11-17 12:51:15 · 316 阅读 · 0 评论 -
2.3.1 合并排序
#include #include using namespace std; void merge(vector &ivec, int p, int q, int r ) { int nl=q-p+1; int nr=r-q; int *L=new int[nl]; int *R=new int[nr]; for(int i=0;i<nl;i++) { L[i]=ivec[p+原创 2012-11-17 10:06:09 · 190 阅读 · 0 评论 -
2.1 插入排序
#include #include using namespace std; int main() { cout<<"enter a list of numbers:(ctrl+z to end)"<<endl; vector ivec; int a; while(cin>>a) ivec.push_back(a); for(vector::size_type i=1;i<ive原创 2012-11-17 09:38:47 · 255 阅读 · 0 评论 -
思考题 2-2 冒泡排序
#include #include using namespace std; //将小的数往数组前端冒泡 void BubbleSort(vector &ivec) { vector::size_type i=0,j=0; for(i=0;i<ivec.size()-1;i++) { for(j=ivec.size()-1;j>i;j--) { if(ivec[j]<iv原创 2012-11-17 16:47:36 · 249 阅读 · 0 评论 -
练习 2.3-5 二分查找
#include #include using namespace std; void merge(vector &ivec, int p, int q, int r ) { int nl=q-p+1; int nr=r-q; int *L=new int[nl]; int *R=new int[nr]; for(int i=0;i<nl;i++) { L[i]=ivec[p原创 2012-11-17 11:19:42 · 260 阅读 · 0 评论 -
习题 6.2-5 保持堆的性质 (迭代)
void MaxHeapify(vector &Heap,int i) { int left=i; int right=i; int temp; int largest=i; while(i<Heap.size()) { left=i<<1; right=(i<<1)+1; largest=i; if(leftHeap[i]) largest=left;原创 2012-12-29 21:24:24 · 173 阅读 · 0 评论 -
6.2 保持堆的性质
void MaxHeapify(vector &Heap,int i) { //左子索引 int left=i<<1; //右子索引 int right=(i<<1)+1; int temp; int largest=i; if(leftHeap[i]) largest=left; if(rightHeap[i]) largest=right; if(i!=large原创 2012-12-29 21:04:46 · 268 阅读 · 0 评论