2022年算法程序 .pdf
《2022年算法程序 .pdf》由会员分享,可在线阅读,更多相关《2022年算法程序 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法程序 by Jetway from hdu_cloud 随便编了几个程序,主要包括:插入排序,shell排序,快速排序,冒泡排序,递归型、迭代型、自然归并排序,大数相乘, 01 背包问题的贪婪算法,矩阵链相乘的算法插入排序:#include #include using namespace std; #define N 100 #define random(x) (rand()%x) void main() int aN; int n,m,key; cout输入实验次数:n; while(n-) cout输入数组个数:m; cout原始数据为: endl; srand(unsigned)t
2、ime(NULL); for(int i=0;im;i+) ai=random(100); coutai= ai ; coutendl; for(int j=1;j0&aikey;i-) ai+1=ai; ai+1 = key; cout插入排序后: endl; for(i=0;im;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - coutai= ai ; coutendl; Shell 排序#include #inc
3、lude #define random(x) (rand()%x) int a100; using namespace std; void main() int add,n,i,j,t,k; cout输入数组个数:n; srand(unsigned) time(NULL); cout原始数据: endl; for(i=0;in;i+) ai=random(100); coutai= ai ; cout0;add/=2) for(j=add;j=0&t*(a+k);k-=add) *(a+k+add) = *(a+k); *(a+k+add) = t; coutshell 排序后数据: endl
4、; for(i=0;in;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - coutai= ai ; coutendl; 快速排序#include #include #define random(x) (rand()%x) int a100; using namespace std; void swap(int s,int left,int right) int t; t=*(s+left); *(s+left)=*(s
5、+right); *(s+right)=t; int partition(int s,int left,int right) int p = sright; int mid = left; int t; for(int i = left;iright;i+) if(si=sright) swap(s,i,mid); mid+; swap(s,mid,right); return mid; void qsort(int s,int left,int right) if(leftright) int pi = partition(s,left,right); 名师资料总结 - - -精品资料欢迎下
6、载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - qsort(s,left,pi-1); qsort(s,pi+1,right); void main() int i,n; cout输入数组个数:n; srand(unsigned)time(NULL); cout原始数据为:endl; for(i=0;in;i+) ai=random(100); coutai = ai ; coutendl; qsort(a,0,n-1); cout快速排序后数据为:endl; f
7、or(i=0;in;i+) coutai = ai ; coutendl; 冒泡排序#include #include #define random(x) (rand()%x) int a100; using namespace std; void main() int n,i,j,t; cout请输入数组个数:n; srand(unsigned)time(NULL); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - cout
8、原始数据为:endl; for(i=0;in;i+) ai = random(100); coutai = ai ; coutendl; for(i=1;i=i;j-) if(*(a+j)*(a+j-1) t=*(a+j); *(a+j)=*(a+j-1); *(a+j-1)=t; cout冒泡排序后数据为:endl; for(i=0;in;i+) coutai = ai ; coutendl; 递归型归并排序#include #include #include #define arrLen 10 #define random(x) (rand()%x) int r100; using nam
9、espace std; / 相邻有序段合并void Merge_two_Arr(int a,int s,int m,int n) int i,j,k ; k = s; i = s; j = m+1 ; while(i=m & j=n) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - if(ai=aj ) rk+ = ai+ ; else rk+ = aj+ ; while(i=m) rk+=ai+; while(j=n) rk
10、+=aj+; for(i = 0; in+1;i+) ai = ri; / 合并排序总函数void MergeSort(int a,int s, int n) if(sn) int m = (s+n)/2 ; MergeSort(a,s,m); MergeSort(a,m+1,n) ; Merge_two_Arr(a,s,m,n); void main() cout# 递归归并排序:#endl; int i,aarrLen; srand( (unsigned)time( NULL ) ); cout原始数据: endl; for(i = 0;iarrLen;i+) ai = random(10
11、0); coutai= ai ; coutendl; MergeSort(a,0,9); cout归并排序后数据:endl; for(i = 0;iarrLen;i+) coutai= ai ; coutendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - 迭代型归并排序#include #include #include #define arrLen 10 #define random(x) (rand()%x) in
12、t r100; using namespace std; / 相邻有序段合并void Merge_two_Arr(int a,int r,int s,int m,int n) int i,j,k ; k = s; i = s; j = m+1 ; while(i=m & j=n) if(ai=aj ) rk+ = ai+ ; else rk+ = aj+ ; while(i=m) rk+=ai+; while(j=n) rk+=aj+; / 一遍二路合并void MergePass(int a,int r,int n,int len) int s,e; s = 0; while(s+len=n
13、) e = n-1; Merge_two_Arr(a,r,s,s+len-1,e); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - s = e+1; if(sn) for(;sn;s+) rs = as; / 合并排序总函数void MergeSort(int a, int n) int *p; int len = 1; int f = 0; p=(int *)malloc(sizeof(int)*n); while(len
14、n) if(f) MergePass(p,a,n,len); else MergePass(a,p,n,len); len*=2; f=1-f; if(f) for(f = 0;fn;f+) af = pf; free(p); void main() cout# 迭代归并排序:#endl; int i,aarrLen; srand( (unsigned)time( NULL ) ); cout原始数据: endl; for(i = 0;iarrLen;i+) ai = random(100); coutai= ai ; coutendl; MergeSort(a,arrLen); cout归并
15、排序后数据:endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - for(i = 0;iarrLen;i+) coutai= ai ; coutendl; 自然归并排序#include #include #include #define arrlen 10 #define random(x) (rand()%x) int r100; using namespace std; / 扫描待排数组void ScanTarget
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年算法程序 2022 算法 程序
限制150内