姜学峰C语言.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档