C语言编程的排序方法Shell排序选择排序快速排序冒泡排序
更新时间:2024-01-07 07:10:01 阅读量: 教育文库 文档下载
C语言编程的排序方法Shell排序选择排序快速排序冒泡排序
2007-11-28
数据的排序是学习C语言经常碰到的问题?所谓排序是指把一组杂乱无章的数按照大小顺序排列。包括整数、实数、字符及字符串排序。C语言编程中排序的方法很多,?这里归纳较常用的几种排序方法。它们同样适合于其他高级语言。 Shell排序
Shell排序是以发明者命名的一种较快的排序方法。Shell排序基本算法思想是:将整个无序序列分割成若干小的子序分别进行插入排序。
子序列的分割方法为:将相隔某个增量h的元素构成一个子序列。在排序过程中,逐次减小这个增量,?最后当h减到1时,进行一次插入排序,排序就完成。
在本函数中,增量序列取 ht=2t-1,1 tlog2n其中n为待排序序列的长度。 例:(/* 将输入的数据排序后,输出一个测试Shell排序的主函数*/) #define SIZE 10 main() { void shell(); int d[SIZE],i;
printf(“Input %d numbers\\n\ for(i=0;i
scanf(“%d\&d[i]); shell(d,SIZE);
printf(“After sort:\\n\ for(i=0;i
printf(“%5d\ printf(“\\n\
/*把数组V的元素按增序排序*/ void shell(v,n) int v[],n;
{int gap,i,j,temp;
for(gap=n/2;gap>0;gap/=2) for(i=gap;i
for(j=i-gap;j>=0 && v[j]) v[j+gap];j-=gap) { temp=v[j]; v[j]=v[j+gap]; v[j+gap]=temp; }
注:这里,数组作为函数参数,参数组中元素值的改变就会反过来影响到实参数组。 选择排序
选择排序基本算法思想:首先找出最小的元素,然后把这个元素与第一个元素互换,这样值最小的元素就放到了第一个位置;接着,再从剩下的元素中找值最小的,把它和第二个元素互换,使得第二小的元素放在第二个位置上,依此类推,直到所有的值由小到大排列为止。
例: # define NUM 10 main()
{int a[NUM],i,j,r,temp;
printf(“Please input %d number\\n\ for (i=0;i
scanf(\%d\&a[i]); for(i=0;i r=i;
for(i=i+1;j if(a[i] r=j; if(r!=i)
temp=a[i];a[i]=a[r];a[r]=temp;} } printf(\ for(i=0;i
printf(\%5d\ printf(\
快速排序
快速排序是目前使用较好的排序算法,它是由C.A.Hoare发明并命名的。快速排序基本算法思想:通过一次分割,将无序序列分成两部分,其中前一部分的元素值均不大于后一部分的元素值。然后对每一部分利用同样的方法进行分割,这个过程一直做到每一个子序列的长度小于某个值m为止。
对序列p的分割过程: 首先,在序列的第一个、中间一个及最后一个元素中选取中项,得p(k),并将p(k)赋给t;再将序列中的第一个元素移到p(k)的位置上;然后设置两个指针i和j分别指向序列的起始和最后的位置。 例: void quick(v,n) int v[],n; { void qs(); qs(v,0,n-1);
/*快速排序,数组方案*/ void qs(v,left,right) int v[],left,ringt; { int i,j,x,temp; i=left;
v=v[(left+right)/2]; while (i while([i] j--; if(i<=j){ temp=v[i]; v[i]=v[j]; v[j]=temp; i++; j--; } } if (left
qs(v,left,j); if(i
qs(v,i,right); }
注:在这个递归函数例子中,数组V既做为形参数,又做为实际参数。 冒泡排序
冒泡排序基本算法思想:从前到后扫描序列,比较相邻两个项目的大小,若发现逆序进行交换,最后使最大者换到序列的最后;然后再从后到前扫描剩下的序列,比较相邻两个项目的大小,若发现逆序则进行交换,最后使最小者换到序列的最前面。对剩下的序列重复上述过程,直到剩下的序列为空止。 例:void ma(p,n) int P[],n;
{ int m,k,j,i,d; k=0;m=n-1; while (k
{ j=m-1;m=0; for(ik;i<=;i++) if(p[i]>p[i+1])
{ d=p[i];p[i]=p[i+1]; p[i+1]=d;m=i;} j=k+1;k=0;
for(i=m;i>=j;i--) if (p[i-1]>p[i])
{d=p[i-1];p[i]=p[i-1]; p[i-1]=d;k=i;} } return;
正在阅读:
C语言编程的排序方法Shell排序选择排序快速排序冒泡排序01-07
读《彼得潘》有感02-16
小学二年级数学题库201903-09
日本姓氏大全10-25
作文指导:细节描写(公开课)06-04
线性复用段保护倒换事件12-09
领导生病问候短信02-06
关于语文课堂教学有效性的几点思考05-11
安卓手机如何上twitter?02-09
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 排序
- 语言编程
- 冒泡
- 快速
- 选择
- 方法
- Shell
- 外研版八年级英语上册Module7-12 句子翻译测试
- 图像处理和模式识别资料
- 最新的 OTN 性能(G.709)
- 三年专科汽车营销课程实践型教学模式的探讨-教育文档
- 24诗经两首(关雎、蒹葭)的教案
- 2019-2020年九年级化学下册 9.2 金属的化学性质学案2(新版)鲁教版(I) - 图文
- 食品安全科普知识竞赛题(有答案)资料
- 文科综合能力测试
- 关于人民币兑换的说明文:港币与人民币的兑换
- 氧气充装企业安全风险告知牌 - 图文
- 2016年浙江省行政执法资格模拟考试(48)
- 生命的时钟 - 高三随笔散文1000字
- 以物质的量为中心的计算
- 邓光亮(初稿) - 事实劳动关系的法律保护
- RNA的种类与功能的多样性
- 塑胶文具项目可行性研究报告(发改立项备案+2013年最新案例范文)详细编制方案
- 仁爱版英语七年级下册Unit7Topic3
- 2016继续教育抗菌药物临床合理应用答案
- 情感教育在小学语文教学策略探讨
- 城市轨道交通运营安全风险探析