- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
排序与查找
1.选择排序
算法:N元数组a[0]~a[N-1]由小到大排序:第0步:找到a[0]~a[N-1]中的最小值元素与a[0]交换;第1步:找到a[1]~a[N-1]中的最小值元素与a[1]交换;第2步:找到a[2]~a[N-1]中的最小值元素与a[2]交换; …第i步:找到a[i]~a[N-1]中的最小值元素与a[i]交换;…
第N-2步:找到a[N-2]~a[N-1]中的最小值元素与a[N-2]交换。算法停止。
思考:由大到小排序算法如何改动?
#include stdio.h#define N 10
void SelSort(int a[N]) { /*选择排序函数*/? ?int i,j,minj,t;
? ?for (i = 0;i N-1;i++) {
? ?? ?for (j = i + 1;j N;j++)
? ?? ? ? ?if(a[j] a[i]) {
? ?? ?? ?? ??t = a[i];
? ?? ?? ????a[i] = a[minj];
? ?? ?? ???a[minj] = t;
? ?? ?}
? ?}
}
这样中间有些交换是没有必要的,设定一个minj变量记录当前一趟最小值的下标。可以减少变量交换的次数。改进如下:void SelSort(int a[N]) { /*改进选择排序函数*/? ?int i,j,minj,t;
? ?for (i = 0;i N-1;i++) {
? ?? ?minj = i;
? ?? ?for (j = i + 1;j N;j++)
? ?? ?if(a[j] a[minj])
? ?? ?? ? minj = j;
? ?? ?if(minj != i) {
? ?? ?? ?t = a[i];
? ?? ?? ?a[i] = a[minj];
? ?? ?? ?a[minj] = t;
? ?? ?}
? ?}
}
void main(){
? ?int a[N],i;
? ?for(i = 0;i N;i++)
? ?? ?scanf(%d,a + i);
? ?SelSort(a);
? ?for (i = 0;i N;i++)
? ?? ?printf(%6d,a[i]);
}
2.插入排序
引例:写一个函数,将一个整型数x插入到由小到大排列的整型数组a[0]~a[N-1]中,使得插入元素后的数组a[0]~a[N]保持升序。
void insert(int a[N+1],int x) {? ?int i = N - 1;
? ?while (i = 0 a[i] x) {
? ?? ?a[i+1] = a[i];
? ?? ?i--;
? ?}
? ?a[i+1] = x;
}
算法要点:将升序数组中大于x的所有元素向后挪动一个下标位置;循环退出时,下标i+1位置为一空位置,正好是正确插入元素x的位置.
插入排序算法:
N元数组a[0]~a[N-1]由小到大排序:第1步:将a[1]插入a[0]~a[1]中,使得a[0]~a[1]升序;第2步:将a[2]插入a[0]~a[2]中,使得a[0]~a[2]升序;第3步:将a[3]插入a[0]~a[3]中,使得a[0]~a[3]升序; …第i步:将a[i]插入a[0]~a[i]中,使得a[0]~a[i]升序;…
第N-1步:将a[N-1]插入a[0]~a[N-1]中,使得a[0]~a[N-1]升序;算法停止。
思考:由大到小排序算法如何改动?
#include stdio.h#define N 10
void InsSort(int a[N]) { /*N元数组插入排序*/? ?int i,j,x;
? ?for(i = 1;i N;i++){
? ?? ?x = a[i];
? ?? ?j = i - 1;
? ?? ?while(j = 0 a[j] x) {
? ?? ?? ?a[j+1] = a[j];
? ?? ?? ?j--;
? ?? ?}
? ?? ?a[j+1] = x;
? ?}
}
void main() {
? ?int a[N],i;
? ?for (i = 0;i N;i++)
? ?? ?scanf(%d,a[i]);
? ?InsSort(a);
? ?for (i = 0;i N;i++)
? ?? ?printf(%6d,a[i]);
}
3.冒泡排序
相邻元素比较大小发生交换使最大值(最小值)浮出到数组尽头:
(1)若a0a1,则a0?a1;(使a1为a0,a1的大者)(2)若a1a2,则a1?a2;(使a2为a1,a2的大者)…
(i) 若ai-1ai,则ai-1?ai交换(使ai为a
您可能关注的文档
- cxf开发实践-添加SSL支持..doc
- CYH25氧气测定器..doc
- CYED系列多功能电力仪表产品样本..doc
- CZ01-铸铁化学成分..doc
- CZB聚焦超声技术2..doc
- c_2001计算机C语言..doc
- C_C++中const关键字详解..doc
- CYCLONE解答..doc
- C_Primer_Plus(第五版)全书源代码..doc
- C内存区划分_分配_常量存储区_堆_栈_自由存储区_全局区..doc
- 2026届高考数学总复习(第1轮)基础版第50讲 直线的方程.pptx
- 《关于组织开展能源领域氢能试点工作的通知》解读及对策.docx
- 二年级数学奇妙的动物世界跨学科项目化学习设计.docx
- 高一美术传承与创新中国近现代美术思政融合课教学设计.docx
- 2025年湖北省省直辖行政单位选调生考试(行政职业能力测验)综合能力测试题带答案.docx
- 2025年温州医科大学仁济学院单招语文测试模拟题库附答案.docx
- 2025年清远职业技术学院单招(语文)测试模拟题库附答案.docx
- 2025年湖北省咸宁市事业单位招聘考试(职业能力倾向测验)题库及答案1套.docx
- 2025年温州大学单招语文测试题库有答案.docx
- 2025年湖北省荆州市单招语文测试模拟题库a4版.docx
文档评论(0)