算法导论 第二章 例子与习题代码 插入排序 归并排序
来源:互联网 发布:apache auth身份认证 编辑:程序博客网 时间:2024/05/01 23:07
头文件:
#ifndef CHAPTER2_H#define CHAPTER2_H#include<iostream>#include <algorithm>#include<vector>#include<map>const size_t OUT_OF_RANGE=100;const int INFINITE=100;void array_display(int* A,size_t n){for(size_t i=0;i<n;i++){std::cout<<A[i]<<" ";}std::cout<<std::endl;}//insertion sortvoid insertion_sort(int* A,size_t n){for(size_t j=1;j<n;j++){int key=A[j];size_t i=j-1;while(i>=0&&A[i]>key){A[i+1]=A[i];i--;}A[i+1]=key;}}//merge sortvoid merge(int* a,size_t p,size_t q,size_t r){size_t n1=q-p+1;size_t n2=r-q;std::vector<int> L(a+p,a+q+1);std::vector<int> R(a+q+1,a+r+1);L.push_back(INFINITE);R.push_back(INFINITE);size_t i=0;size_t j=0;for(size_t k=p;k<=r;k++)if(R[j]<L[i]){a[k]=R[j];j++;}else{a[k]=L[i];i++;}}void merge_sort(int* a,size_t p,size_t r){if(p<r){size_t q=(p+r)/2;merge_sort(a,p,q);merge_sort(a,q+1,r);merge(a,p,q,r);}}//2.3-4void insertion_sort_recursive(int*a ,size_t n){if(n>0){insertion_sort_recursive(a,n-1);int key=a[n-1];size_t i=n-2;while(i>=0&&a[i]>key){a[i+1]=a[i];i--;}a[i+1]=key;}}//2.2-3void selection_sort(int* a,size_t n){for(size_t i=0;i<n-1;i++){int min_ele=a[i];size_t min_index=i;for(size_t j=i+1;j<n;j++){if(a[j]<min_ele){min_ele=a[j];min_index=j;}}std::swap(a[min_index],a[i]);}}//2.3-6size_t binary_search_iterative(int* a,int v,size_t low,size_t high){while(low<=high){size_t mid=(low+high)/2;if(a[mid]==v)return mid;else if(a[mid]>v)high=mid-1;else low=mid+1;}return OUT_OF_RANGE;}size_t binary_search_recursive(int* a,int v,size_t low,size_t high){if(low>high)return OUT_OF_RANGE;size_t mid=(low+high)/2;if(v==a[mid])return mid;else if(v>a[mid])return binary_search_recursive(a,v,mid+1,high);else return binary_search_recursive(a,v,low,mid-1);}//2.3-7std::multimap<size_t,size_t> find_company(int* a,int v,size_t low,size_t high){insertion_sort(a,high-low+1);array_display(a,high-low+1);std::multimap<size_t,size_t> vp;for(size_t i=low;i<=high;i++){size_t tmp=binary_search_recursive(a,v-a[i],low,high);//size_t tmp=binary_search_iterative(a,v-a[i],low,high);if(tmp!=OUT_OF_RANGE)vp.insert(std::pair<size_t,size_t>(i,tmp));}return vp;}//2.2void bubble_sort(int* a,size_t n){for(size_t i=0;i<n-2;i++)for(size_t j=n-1;j>i;j--)if(a[j]<a[j-1])std::swap(a[j],a[j-1]);}//2.4size_t merge_inversion(int* a,size_t p,size_t q,size_t r){size_t n1=q-p+1;size_t n2=r-q;std::vector<int> L(a+p,a+q+1);std::vector<int> R(a+q+1,a+r+1);L.push_back(INFINITE);R.push_back(INFINITE);size_t i=0;size_t j=0;size_t inver=0;for(size_t k=p;k<=r;k++)if(R[j]<L[i]){inver+=n1-i;a[k]=R[j];j++;}else{a[k]=L[i];i++;}return inver;}size_t count_inversions(int* a,size_t p,size_t r){size_t inversions=0;if(p<r){size_t q=(p+r)/2;inversions+=count_inversions(a,p,q);inversions+=count_inversions(a,q+1,r);inversions+=merge_inversion(a,p,q,r);}return inversions;}#endif测试文件:
#include "chapter2.h"void main(){int a[]={5,2,4,6,1,3};//int a[]={2,3,8,6,1};//int n=6;//size_t p=0;//size_t r=4;//size_t q=(p+r)/2;//size_t n1=q-p+1;//size_t n2=r-q;//std::vector<int> L(a+p,a+q+1);//std::vector<int> R(a+q+1,a+r+1);//L.push_back(INFINITE);//R.push_back(INFINITE);//bubble_sort(a,n);//insertion_sort(a,n);//selection_sort(a,n);//insertion_sort_recursive(a,n);merge_sort(a,0,5);//size_t c=count_inversions(a,0,5);//std::cout<<c<<std::endl;array_display(a,6);//size_t index=binary_search_iterative(a,1,0,5);//std::cout<<index<<std::endl;//std::multimap<size_t,size_t> vp=find_company(a,7,0,5);//std::cout<<"the size of vp "<<vp.size()<<std::endl;}
0 0
- 算法导论 第二章 例子与习题代码 插入排序 归并排序
- 算法导论第二版笔记之插入排序与归并排序分析及其代码
- 算法导论第二章总结:插入排序、归并排序
- 【算法导论】第二章之归并排序
- 算法导论第二章-归并排序
- 算法导论第二章之归并排序
- 算法导论第二章(归并排序)
- 插入、归并排序 《算法导论》
- 【算法导论实验1】插入排序与归并排序
- 算法导论:插入排序和归并排序
- 【算法导论】第二章之插入排序
- 算法导论第二章2.1插入排序
- 算法导论第二章《插入排序》
- 算法导论第二章C++实现归并算法排序
- 【算法导论】 第二章 插入排序、分治排序
- 算法导论-插入排序,归并排序,快速排序总结
- 算法导论第二章C++实现归并排序
- 《算法导论》学习笔记之一 排序算法1 (插入排序、选择排序、归并排序)实现代码C++
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
- 隐马尔可夫模型及的评估和解码问题
- 记第五届山东省ACM程序设计比赛——遗憾并不是遗憾
- 百度拼音---基于国内最大搜索引擎百度带来的精确词库打字体验
- c语言之输入一个数并判断它是几位数
- 算法导论 第二章 例子与习题代码 插入排序 归并排序
- 合肥男子到诊所看病死亡后遭医生埋尸灭迹(图)
- C++异常与结构化异常SEH的比较
- iOS 开发常用的一些工具
- 百度浏览器,一款简单轻快绿色纯净的浏览器
- The Way They Move: Tracking Muitiple Targets with Similar Appearance文章思想及其代码分析
- Memcache负载均衡配置
- 5. 链表
- C++静态库与动态库