- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
姜学峰C语言
* 排序举例快速排序法 int main() { int A[N],i; srand((unsigned int)time(0)); printf(Origin: ); for(i=0; iN; i++) { //随机产生N个数 A[i] = rand()%100; printf(%d ,A[i]); } QuickSort(A,N,0,N-1); * 排序举例快速排序法 printf(\n Sort: ); for(i=0; iN; i++) //输出排序结果 printf(%d , A[i]); return 0; } * 排序举例快速排序法 void QuickSort(int A[],int n,int left,int right) {//快速排序 n=序列元素个数 left=序列左边界 right=序列右边界 int i,j,t; if(leftright) { //一趟快速排序 i=left; j=right + 1; while(1) { while(i+1n A[++i] A[left]); //向后搜索 升序 降序 while(j-1-1 A[--j] A[left]); //向前搜索 升序 降序 if(i=j) break; t=A[i]; A[i]=A[j]; A[j]=t; } * 排序举例快速排序法 t=A[left]; A[left]=A[j]; A[j]=t; QuickSort(A, n, left, j-1);//关键数据左半部分递归 QuickSort(A, n, j+1,right);//关键数据右半部分递归 } } * 排序举例快速排序法 程序运行结果如下(每次运行数据会随机变化): Origin: 4 8 65 14 50 72 27 50 82 80 Sort: 4 8 14 27 50 50 65 72 80 82 * 排序举例 (5)排序算法比较与选择 * 排序举例 快速排序在基于比较的排序方法中被认为是最好的。 因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法应综合考虑因素:待排序记录数目、记录规模、关键字结构及其初始状态、稳定性要求、存储结构、时间和辅助空间复杂度等。一般建议: ①若n较小(如n≤50),选用插入排序或选择排序; ②若数据集合初始状态基本有序,选用插入排序、冒泡排序; ③若n较大,选用快速排序。 * 数组习题精讲 1 排序举例 2 查找举例 3 空间换时间举例 * 查找举例 快速排序在基于比较的排序方法中被认为是最好的。 因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法应综合考虑因素:待排序记录数目、记录规模、关键字结构及其初始状态、稳定性要求、存储结构、时间和辅助空间复杂度等。一般建议: ①若n较小(如n≤50),选用插入排序或选择排序; ②若数据集合初始状态基本有序,选用插入排序、冒泡排序; ③若n较大,选用快速排序。 * 查找举例顺序查找法 (1)顺序查找法 顺序查找的基本思想是让关键字与序列中的数逐个比较,直到找出与给定关键字相同的数为止或序列结束,一般应用于无序序列查找。 * 查找举例顺序查找法 例5 编写顺序查找法的查找函数Search,从一个无序数组中找到查找数据的位置。 #include stdio.h int Search(int A[],int n,int find) { // 顺序查找 n=序列元素个数 find=欲查找数据 int i; for (i=0; in ; i++) if (A[i]==find) return i; return -1; } * 查找举例顺序查找法 #define N 10 int main() {int A[N]={18,-3,-12,34,101,211,12,90,77,45}; int i,find; scanf(%d,find); i=Search(A,N,find); if(i = 0) printf(A[%d]=%d\n,i,find); else printf(not found\n); return 0; } * 查找举例二分查找法 (2)二分查找法 对于有序序列,可以采用二分查找法进行查找。它的基本思想是:升序排列的n个元素集合A分成个数大致相同的两部分,取A[n/2]与欲查找的find作比较,如果相等则表示找到find,算法终止。如果findA[n/2],则在A的前半部继续搜索find,如果findA[n/2],则在A的后半部继续搜索find
您可能关注的文档
- 地理《交通运输业》课件1(湘教版八年级下册).ppt
- 地球自转第1讲.ppt
- 地理——认识地球.ppt
- 地理-沙漠类型与世界十大沙漠.ppt
- 地理七上气温的变化与分布.ppt
- 地球自转运动地理意义.ppt
- 地理七年级上册第一章第二节 地球的运动(课件).ppt
- 地理专业二轮复习之主干知识梳理.ppt
- 地理中考冲刺.ppt
- 地理二轮复习的四大问题及解决方案.ppt
- 数据仓库:Redshift:Redshift与BI工具集成.docx
- 数据仓库:Redshift:数据仓库原理与设计.docx
- 数据仓库:Snowflake:数据仓库成本控制与Snowflake定价策略.docx
- 大数据基础:大数据概述:大数据处理框架MapReduce.docx
- 实时计算:GoogleDataflow服务架构解析.docx
- 分布式存储系统:HDFS与MapReduce集成教程.docx
- 实时计算:Azure Stream Analytics:数据流窗口与聚合操作.docx
- 实时计算:Kafka Streams:Kafka Streams架构与原理.docx
- 实时计算:Kafka Streams:Kafka Streams连接器开发与使用.docx
- 数据仓库:BigQuery:BigQuery数据分区与索引优化.docx
文档评论(0)