最新ACM程序设计常用算法与数据结构参考.docx
- 文档编号:10741977
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:211
- 大小:80.78KB
最新ACM程序设计常用算法与数据结构参考.docx
《最新ACM程序设计常用算法与数据结构参考.docx》由会员分享,可在线阅读,更多相关《最新ACM程序设计常用算法与数据结构参考.docx(211页珍藏版)》请在冰豆网上搜索。
最新ACM程序设计常用算法与数据结构参考
ACM程序设计常用算法与数据结构参考
ACM程序设计常用算法与数据结构参考
Tomsdinary
前言6
排序算法7
插入排序7
选择排序9
冒泡排序10
希尔排序11
随机化快速排序13
归并排序16
堆排序18
大整数处理21
包含头文件21
定义21
实现23
流输出23
流输入23
赋值24
转换函数25
规范化符号化25
带符号乘法26
无符号取模26
整数乘法27
整数加法29
带符号加法31
浮点乘法32
浮点加法34
带符号减法35
整数减法36
浮点减法39
带符号比较40
无符号比较41
无符号乘方42
带符号乘方42
使用方法43
高级数据结构43
普通二叉搜素树43
包含头文件43
定义43
实现46
删树49
插入元素到树49
复制树52
求树的高度55
求叶子的个数56
删除元素56
使用方法58
基本线段树模式59
基本并查集模式61
散列实现的一种方式参考62
定义与实现62
使用方法71
堆71
包含头文件71
定义与实现71
使用方法74
图相关算法75
图的深度优先和广度优先算法举例75
无向图最小生成树的Kruskal算法举例77
无向图最小生成树的Prim算法举例79
有向图的单源最短路径Dijkstra算法举例81
有向图的多源最短路径Floyd算法举例83
拓扑排序举例84
AOE网的算法举例87
求图的一个中心算法举例91
求图的P个中心算法举例94
SPFA算法举例98
割顶和块的算法举例101
计算几何算法103
向量模104
向量点积104
向量叉积104
左右判断104
相交判断105
正规相交交点105
判断多边形凸105
任意多变形面积106
凸包问题的快包实现举例107
STL算法参考111
accumulate()111
adjacent_difference()112
adjacent_find()112
binary_search()113
copy()113
copy_backward()113
count()114
count_if()114
equal()114
equal_range()115
fill()115
fill_n()115
find()115
find_if()116
find_end()116
find_first_of()116
for_each()117
generate()117
generate_n()117
includes()117
inner_product()118
inplace_merge()119
iter_swap()119
lexicographical_compare()119
lower_bound()120
max()120
max_element()121
min()121
min_element()121
merge()122
mismatch()122
next_permutation()122
nnth_element()123
partial_sort()123
partial_sort_copy()124
partial_sum()124
prev_permutation()125
random_shuffle()125
remove()126
remove_copy()126
remove_if()126
remove_copy_if()127
replace()127
replace_copy()127
replace_if()127
replace_copy_if()128
reverse()128
reverse_copy()128
rotate()128
rotate_copy()129
search()129
search_n()129
set_difference()130
set_intersection()130
set_symmetric_difference()131
set_union()131
sort()132
stable_partition()132
stable_sort()132
swap()133
swap_range()133
transform()133
unique()134
unique_copy()134
upper_bound()135
make_heap()135
pop_heap()135
push_heap()136
sort_heap()136
字符串处理137
KMP算法举例137
C++语言可用头文件138
140
前言
如今的程序设计已不再是个人英雄时代了,程序的设计和开发实施需要靠团队成员的积极配合和合作。
软件技术在当今时代已不是信息技术竞争核心,对于技术知识的获取变得不再重要。
当今IT竞争,靠的是先进的观念,有效的沟通和合作,靠的是高瞻远瞩的预见能力,靠的是个人的想法而绝不是技能。
当然掌握好众多技术是实现我们独特创意的途径,但绝不是我们可以屹立IT界的根本法宝。
随着互联网发展的不断深入,技术知识的获取不再成为问题。
程序员不能单靠通晓某一核心技术而获得核心竞争力。
当今的IT界知识分享,知识交流,知识开放是主旋律,凡是开放的平台,开放的个人,开放的公司才是真正拥有竞争力的,凡是那些封闭的平台,封闭的个人,封闭的公司其发展的道路终会是艰难的。
而这种开放的态度在中国程序员中更应该得到普及与遵守。
其根本在于中国程序员中的高手充其量也只是一个高级用户,真正的技术掌握在技术公司那里。
所以为什么还有保留一些使用技巧呢。
不开放不分享不合作,优秀的程序员中会沦为平庸的人。
基于以上思考和论断,我将自己三年在算法设计和数据结构学习过程中可供借鉴和参考使用的代码总结如下。
一方面作为我们队参加ACM的内部参考资料,另一方面分享出来供后来者学习参考。
或许对诸位会有点帮助。
同时也请您记住和接受以上观点,在一个分享交流的环境你,你的技术进步会更加迅速。
也希望那些有好代码,好思想的高手将自己的智慧分享出来。
整理出来。
这不仅有利于个人学习总结,更有利于我们怀化学院ACM队伍健康发展。
排序算法
插入排序
/*
函数名:
InsertionSort
功能:
插入排序
模板参数说明:
T必须支持小于操作
参数说明:
data待排序数组,size待排序数组大小
前置条件:
data!
=NULL,size>0
后置条件:
data按非降序排列
用法:
intarr[]={10,9,8,4,5,7,6,3,1,4};
InsertionSort(arr,10);
*/
template
voidInsertionSort(Tdata[],intsize)
{
inti,j;Ttemp;
for(i=1;i { temp=data[i]; for(j=i;j>0&&temp data[j]=data[j-1]; data[j]=temp; } } /* 函数名: InsertionSort 功能: 插入排序 模板参数说明: T元素类型,Func函数对象或函数指针 参数说明: data待排序数组,size待排序数组大小,f函数对象或地址 前置条件: data! =NULL,size>0 后置条件: data按f排列 用法: boolcmp(inta,intb) {returna intarr[]={10,9,8,4,5,7,6,3,1,4}; InsertionSort(arr,10,cmp); */ template voidInsertionSort(Tdata[],intsize,Funcf) { inti,j;Ttemp; for(i=1;i { temp=data[i]; for(j=i;j>0&&f(temp,data[j-1]);--j) data[j]=data[j-1]; data[j]=temp; } } 选择排序 /* 函数名: SelectionSort 功能: 选择排序 模板参数说明: T必须支持小于操作 参数说明: data待排序数组,size待排序数组大小 前置条件: data! =NULL,size>0 后置条件: data按非降序排列 用法: #include intarr[]={10,9,8,4,5,7,6,3,1,4}; SelectionSort(arr,10); */ template voidSelectionSort(Tdata[],intsize) { inti,j,k; for(i=0;i { k=i; for(j=i+1;j { if(data[j] k=j; } std: : swap(data[i],data[k]); } } /* 函数名: SelectionSort 功能: 选择排序 模板参数说明: T元素类型,Func函数对象或函数地址 参数说明: data待排序数组,size待排序数组大小,f函数对象或地址 前置条件: data! =NULL,size>0 后置条件: data按f排列 用法: #include intarr[]={10,9,8,4,5,7,6,3,1,4}; boolcmp(inta,intb) {returna SelectionSort(arr,10,cmp); */ template voidSelectionSort(Tdata[],intsize,Funcf) { inti,j,k; for(i=0;i { k=i; for(j=i+1;j { if(f(data[j],data[k])) k=j; } std: : swap(data[i],data[k]); } } 冒泡排序 /* 函数名: BubbleSort 功能: 冒泡排序 模板参数说明: T必须支持小于操作 参数说明: data待排序数组,size待排序数组大小 前置条件: data! =NULL,size>0 后置条件: data按非降序排列 用法: #include intarr[]={10,9,8,4,5,7,6,3,1,4}; BubbleSort(arr,10); */ template voidBubbleSort(Tdata[],intsize) { inti,j; for(i=0;i { for(j=size-1;j>i;--j) { if(data[j] std: : swap(data[j],data[j-1]); } } } /* 函数名: BubbleSort 功能: 冒泡排序 模板参数说明: T元素类型,Func函数对象或函数地址 参数说明: data待排序数组,size待排序数组大小,f函数对象或地址 前置条件: data! =NULL,size>0 后置条件: data按f序排列 用法: #include boolcmp(inta,intb) {returna intarr[]={10,9,8,4,5,7,6,3,1,4}; BubbleSort(arr,10,cmp); */ template voidBubbleSort(Tdata[],intsize,Funcf) { inti,j; for(i=0;i { for(j=size-1;j>i;--j) { if(f(data[j],data[j-1])) std: : swap(data[j],data[j-1]); } } } 希尔排序 /* 函数名: ShellSort 功能: 希尔排序 模板参数说明: T必须支持小于操作 参数说明: data待排序数组,size待排序数组大小 前置条件: data! =NULL,size>0 后置条件: data按非降序序排列 用法: intarr[]={10,9,8,4,5,7,6,3,1,4}; ShellSort(arr,10); */ template voidShellSort(Tdata[],intsize) { inti,j,hCnt,h; intarray[20],k; Ttemp; for(h=1,i=0;h { array[i]=h; h=3*h+1; } for(i--;i>=0;--i) { h=array[i]; for(hCnt=h;hCnt<2*h;++hCnt) { for(j=hCnt;j { temp=data[j]; k=j; while(k-h>=0&&temp { data[k]=data[k-h]; k-=h; } data[k]=temp; j+=h; } } } } /* 函数名: ShellSort 功能: 希尔排序 模板参数说明: T元素类型,Func函数对象或指针 参数说明: data待排序数组,size待排序数组大小,f函数对象或指针 前置条件: data! =NULL,size>0 后置条件: data按f排列 用法: boolcmp(inta,intb) {returna intarr[]={10,9,8,4,5,7,6,3,1,4}; ShellSort(arr,10,cmp); */ template voidShellSort(Tdata[],intsize,Funcf) { inti,j,hCnt,h; intarray[20],k; Ttemp; for(h=1,i=0;h { array[i]=h; h=3*h+1; } for(i--;i>=0;--i) { h=array[i]; for(hCnt=h;hCnt<2*h;++hCnt) { for(j=hCnt;j { temp=data[j]; k=j; while(k-h>=0&&f(temp,data[k-h])) { data[k]=data[k-h]; k-=h; } data[k]=temp; j+=h; } } } } 随机化快速排序 /* 函数名: quick_sort 功能: 快速排序辅助过程 */ template voidquick_sort(Tdata[],intfrist,intlast) { intlower=frist+1; intupper=last; intt=rand()%(last-frist)+frist; std: : swap(data[frist],data[t]); T&bound=data[frist]; while(lower<=upper) { while(data[lower] { ++lower; } while(bound { --upper; } if(lower { std: : swap(data[lower],data[upper]); ++lower; --upper; } else ++lower; } std: : swap(data[upper],data[frist]); if(frist quick_sort(data,frist,upper-1); if(upper+1 quick_sort(data,upper+1,last); } /* 函数名: QuickSort 功能: 快速排 模板参数说明: T必须支持小于操作 参数说明: data待排序数组,size待排序数组大小 前置条件: data! =NULL,size>0 后置条件: data按f排列 用法: #include #include #include intarr[]={10,9,8,4,5,7,6,3,1,4}; QuickSort(arr,10); */ template voidQuickSort(Tdata[],intsize) { inti,max; if(size<2) return; for(i=1,max=0;i { if(data[max] max=i; } std: : swap(data[size-1],data[max]); srand(time(0)); quick_sort(data,0,size-2); } /* 函数名: quick_sort 功能: 快速排序辅助过程 */ template voidquick_sort(Tdata[],intfrist,intlast,Func&f) { intlower=frist+1; intupper=last; intt=rand()%(last-frist)+frist; std: : swap(data[frist],data[t]); T&bound=data[frist]; while(lower<=upper) { while(f(data[lower],bound)) ++lower; while(f(bound,data[upper])) --upper; if(lower { std: : swap(data[lower],data[upper]); ++lower; --upper; } else ++lower; } std: : swap(data[upper],data[frist]); if(frist quick_sort(data,frist,upper-1,f); if(upper+1 quick_sort(data,upper+1,last,f); } /* 函数名: QuickSort 功能: 快速排 模板参数说明: T元素类型,Func函数对象或指针 参数说明: data待排序数组,size待排序数组大小,f函数对象或指针 前置条件: data! =NULL,size>0 后置条件: data按f排列 用法: #include #include #include boolcmp(inta,intb) {returna intarr[]={10,9,8,4,5,7,6,3,1,4}; Q
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 ACM 程序设计 常用 算法 数据结构 参考