ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:17.80KB ,
资源ID:27541592      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27541592.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c语言各种排序举例.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c语言各种排序举例.docx

1、c语言各种排序举例程序实现:1.冒泡排序的程序实现:/* * * * * * * * * * * * * * * * * * * * * * * */*PROGRAM :起泡排序 */*CONTENT :起泡排序 */* * * * * * * * * * * * * * * * * * * * * * * *#include #include #include #include #include #define MAXSIZE 20 /排序表的最大容量enum BOOLFalse,True;typedef struct /定义排序表的结构int elemwordMAXSIZE; /数据元素关

2、键字int count; /表中当前元素的个数SqList;void InitialSqList(SqList&); /初始化排序表void BubbleSort(SqList &); /起泡排序void PrintSqList(SqList); /显示表中的所有元素void main()SqList L; /声明表Lchar j=y;/-程序说明-printf(本程序将演示起泡排序的操作。n);/-while(j!=n&j!=N)InitialSqList(L); /待排序列初始化BubbleSort(L); /起泡排序PrintSqList(L); /显示排序结果printf(继续进行下一

3、次排序吗?(Y/N);scanf( %c,&j);printf(程序运行结束!n按任意键关闭窗口!n);getchar();getchar();void InitialSqList(SqList &L)/表初始化int i;printf(请输入待排序的记录的个数:);scanf(%d,&L.count);printf(请输入待排序的记录的关键字(整型数):n);for(i=0;i0&change;-i)change=False;for(j=0;jL.elemwordj+1)t=L.elemwordj;L.elemwordj=L.elemwordj+1;L.elemwordj+1=t;chang

4、e=True;void PrintSqList(SqList L)/显示表中所有元素 int i;printf(已排好序的序列如下:n);for(i=0;iL.count;i+)printf(%4d,L.elemwordi);printf(n);*2.选择排序的程序实现:/* * * * * * * * * * * * * * * * * * * * * * * */*PROGRAM :简单选择排序 */*CONTENT :简单选择排序 */* * * * * * * * * * * * * * * * * * * * * * * *#include #include #include #in

5、clude #include #define MAXSIZE 20 /排序表的最大容量typedef struct /定义排序表的结构int elemwordMAXSIZE; /数据元素关键字int count; /表中当前元素的个数SqList;void InitialSqList(SqList&); /初始化排序表void SelectSort(SqList &); /简单选择排序int SelectMinKey(SqList,int); /寻找最小关键字的记录void PrintSqList(SqList); /显示表中的所有元素void main()SqList L; /声明表Lcha

6、r j=y; /-程序说明-printf(本程序将演示简单选择排序的操作。n);/-while(j!=n&j!=N)InitialSqList(L); /待排序列初始化SelectSort(L); /简单选择排序PrintSqList(L); /显示排序结果printf(继续进行下一次排序吗?(Y/N);scanf( %c,&j);printf(程序运行结束!n按任意键关闭窗口!n);getchar();getchar();void InitialSqList(SqList &L)/表初始化int i;printf(请输入待排序的记录的个数:);scanf(%d,&L.count);print

7、f(请输入待排序的记录的关键字(整型数):n);for(i=1;i=L.count;i+)scanf(%d,&L.elemwordi);void SelectSort(SqList &L)/对顺序表L做简单选择排序。int i,j,t;for(i=1;iL.count;+i) /选择第i小的记录,并交换到位 j=SelectMinKey(L,i); /在L.elemwordi.L.count中选择关键字最小的记录if(i!=j) /与第i个记录交换 t=L.elemwordi;L.elemwordi=L.elemwordj;L.elemwordj=t;int SelectMinKey(SqLi

8、st L,int low)/在L.elemwordlow.L.count中寻找关键字最小的记录int i,j,t;t=L.elemwordlow;j=low;for(i=low+1;i=L.count;i+)if(L.elemwordit)t=L.elemwordi;j=i;return j;void PrintSqList(SqList L)/显示表中所有元素int i;printf(已排好序的序列如下:n);for(i=1;i=L.count;i+)printf(%4d,L.elemwordi);printf(n);*3.插入排序的程序实现:/* * * * * * * * * * * *

9、 * * * * * * * * * * * */*PROGRAM :直接插入排序 */*CONTENT :直接插入排序 */* * * * * * * * * * * * * * * * * * * * * * * *#include #include #include #include #include #define MAXSIZE 20 /排序表的最大容量typedef struct /定义排序表的结构int elemwordMAXSIZE; /数据元素关键字int count; /表中当前元素的个数SqList;void InitialSqList(SqList&); /初始化排序表

10、void InsertSort(SqList&); /直接插入排序void PrintSqList(SqList); /显示表中的所有元素void main()SqList L; /声明表Lchar j=y; /-程序说明-printf(本程序将演示直接插入排序的操作。n);/-while(j!=n&j!=N)InitialSqList(L);InsertSort(L);PrintSqList(L);printf(继续进行下一次排序吗?(Y/N);scanf( %c,&j);printf(程序运行结束!n按任意键关闭窗口!n);getchar();getchar();void InitialS

11、qList(SqList &L)/表初始化int i;printf(请输入待排序的记录的个数:);scanf(%d,&L.count);printf(请输入待排序的记录的关键字(整型数):n);for(i=1;i=L.count;i+) scanf(%d,&L.elemwordi);void InsertSort(SqList &L)int i,j;for(i=2;i=L.count;i+)if(L.elemwordiL.elemwordi-1) /,需将L.elemwordi插入有序子表 L.elemword0=L.elemwordi; /复制为哨兵for(j=i-1;L.elemword0

12、L.elemwordj;-j)L.elemwordj+1=L.elemwordj; /记录后移L.elemwordj+1=L.elemword0; /插入到正确的位置void PrintSqList(SqList L)/显示表所有元素int i;printf(已排好序的序列如下:n);for(i=1;i=L.count;i+) printf(%4d,L.elemwordi);printf(n);4.Shell排序的程序实现:/* * * * * * * * * * * * * * * * * * * * * * * */*PROGRAM :希尔排序 */*CONTENT :希尔排序 */* *

13、 * * * * * * * * * * * * * * * * * * * * * *#include #include #include #include #include #define MAXSIZE 20 /排序表的最大容量typedef struct /定义排序表的结构int elemwordMAXSIZE; /数据元素关键字int count; /表中当前元素的个数SqList;void InitialSqList(SqList&); /初始化排序表void ShellSort(SqList &,int ,int);/希尔排序 void ShellInsert(SqList&,i

14、nt); /一趟希尔排序void PrintSqList(SqList); /显示表中的所有元素void main()SqList L; /声明表Lchar j=y;int dlta3=5,3,1; /希尔排序增量序列,本程序采用5,3,1序列int t=3; /希尔排序增量序列中增量的个数 /-程序说明-printf(本程序将演示希尔排序的操作。n增量序列为5,3,1。n);/-while(j!=n&j!=N)InitialSqList(L); /待排序列初始化ShellSort(L,dlta,t); /希尔排序PrintSqList(L); /显示希尔排序结果printf(继续进行下一次排

15、序吗?(Y/N);scanf( %c,&j);printf(程序运行结束!n按任意键关闭窗口!n);getchar();getchar();void InitialSqList(SqList &L)/表初始化int i;printf(请输入待排序的记录的个数:);scanf(%d,&L.count);printf(请输入待排序的记录的关键字(整型数):n);for(i=1;i=L.count;i+)scanf(%d,&L.elemwordi);void ShellSort(SqList &L,int dlta,int t)/按增量序列dlta0.t-1对顺序表L作希尔排序for(int k=0

16、;kt;+k)ShellInsert(L,dltak); /一趟增量为dltak的插入排序void ShellInsert(SqList &L,int dk)/对顺序表L做一趟希尔插入排序。本算法是和一趟直接插入排序相比,作了以下修改:/1. 前后记录的增量是dk,而不是1/2. 0号单元只是暂存单元,不是哨兵。当j=0时,插入位置已找到int i,j;for(i=dk+1;i=L.count;i+)if(L.elemwordiL.elemwordi-dk) /0&L.elemword0L.elemwordj;j-=dk)L.elemwordj+dk=L.elemwordj; /记录后移,查找

17、插入位置L.elemwordj+dk=L.elemword0; /插入到正确的位置void PrintSqList(SqList L)/显示表所有元素int i;printf(已排好序的序列如下:n);for(i=1;i=L.count;i+) printf(%4d,L.elemwordi);printf(n);5.快速排序的程序实现:/* * * * * * * * * * * * * * * * * * * * * * * */*PROGRAM :快速排序 */*CONTENT :快速排序 */* * * * * * * * * * * * * * * * * * * * * * * *#

18、include #include #include #include #include #define MAXSIZE 20 /排序表的最大容量typedef struct /定义排序表的结构int elemwordMAXSIZE; /数据元素关键字int count; /表中当前元素的个数SqList;void InitialSqList(SqList&); /初始化排序表void QuickSort(SqList &); /快速排序void QSort(SqList &,int,int); /子序列快速排序int Partition(SqList &,int,int); /一趟快速排序vo

19、id PrintSqList(SqList); /显示表中的所有元素void main()SqList L; /声明表Lchar j=y; /-程序说明-printf(本程序将演示快速排序的操作。n);/-while(j!=n&j!=N)InitialSqList(L); /待排序列初始化QuickSort(L); /快速排序PrintSqList(L); /显示排序结果printf(继续进行下一次排序吗?(Y/N);scanf( %c,&j);printf(程序运行结束!n按任意键关闭窗口!n);getchar();getchar();void InitialSqList(SqList &L

20、)/表初始化int i;printf(请输入待排序的记录的个数:);scanf(%d,&L.count);printf(请输入待排序的记录的关键字(整型数):n);for(i=1;i=L.count;i+)scanf(%d,&L.elemwordi);void QuickSort(SqList &L)/对顺序表L做快速排序。QSort(L,1,L.count);void QSort(SqList &L,int low,int high)/对顺序表中的子序列L.rlow.high作快速排序int pivotloc;if(lowhigh) /长度大于1pivotloc=Partition(L,lo

21、w,high); /将L.elemwordlow.high一分为二QSort(L,low,pivotloc-1); /对低子表递归排序,pivotloc是枢轴位置QSort(L,pivotloc+1,high); /对高子表递归排序int Partition(SqList &L,int low,int high)/交换顺序表L中子表rlow.high的记录,枢轴记录到位,并返回其所在位置,此时/在它之前(后)的记录均不大(小)于它int pivotkey; pivotkey=L.elemwordlow; /用子表的第一个记录作枢轴记录while(lowhigh) /从表的两端交替地向中间扫描

22、while(low=pivotkey)-high;L.elemwordlow=L.elemwordhigh;/将比枢轴记录小的记录移到低端while(lowhigh&L.elemwordlow=pivotkey)+low;L.elemwordhigh=L.elemwordlow; /将比枢轴记录大的记录移到高端L.elemwordlow=pivotkey; /枢轴记录到位return low; /返回枢轴记录void PrintSqList(SqList L)/显示表中所有元素int i;printf(已排好序的序列如下:n);for(i=1;i=L.count;i+)printf(%4d,L

23、.elemwordi);printf(n);*6.堆排序的程序实现 :/* * * * * * * * * * * * * * * * * * * * * * * */*PROGRAM :堆排序 */*CONTENT :堆排序 */* * * * * * * * * * * * * * * * * * * * * * * *#include #include #include #include #include #define MAXSIZE 20 /排序表的最大容量typedef struct /定义排序表的结构int elemwordMAXSIZE; /数据元素关键字int length; /表中当前元素的个数SqList;void InitialSqList(SqList&); /初始化排序表void HeapSort(SqList &); /堆排序void HeapAdjust(SqList &,int,int); /堆调整void PrintSqList(SqList); /显示表中的所有元素void main()SqList L; /声明表Lchar j=y; /-程序说明-printf(本程序将演示堆排序的操作。n);/-while(j!=n&j!=N)InitialSqList(L); /待排序列初始化HeapSort(L); /堆排序Pr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1