c语言数的排序问题(起泡法)
排序方法是一种重要的,基本的算法。起泡法的基本思路是:每次将相邻的两个数进行比较,将小的调到前面。若有六个数:9,8,5,4,2,0,可以按照下图方式进行对调排序。
第一趟比较先将第一个数9与第二个数8对调,再将第二个数9与第三个数5对调,进行五此后可以得到854209,最大的9已“沉底”,最小的数0已“浮起”。然后第二趟比较再将余下的五个数进行新一轮比较。按照规律进行下去n个数比较n-1次比较,n个数比较时第m趟需要n-m次比较,这种如水底的旗袍冒出水面一样的方法称为起泡法。
我们可以根据此画出流程图并据此写出程序(设n=10)
#include <stdio.h>
int main()
{int a[10];int n,m,k;printf("input 10 numbers:\n");for(n=0;n<10;n++)scanf("%d",&a[n]);for(m=0;m<9;m++) //进行九次循环,实现九次比较for(n=0;n<9-m;n++) //在每次循环中进行9-m次比较if(a[n]>a[n+1]) //相邻两数比较{k=a[n];a[n]=a[n+1];a[n+1]=k; //将大的数放到后面}printf("the sorted numbers:\n");for(n=0;n<10;n++)printf("%d ",a[n]);return 0;
}
输出结果:
程序分析:执行第一次外循环时,m=0,随后执行第一次内循环,此时n=0,在if语句中将a[0]与a[1]进行比较,执行第二次内循环将a[1]与a[2]进行比较,直到a[8]和a[9]比较后第一趟内循环结束,进行第二次外循环,以此类推。
同样的,我们也可以使用起泡法对字符进行排序
#include <stdio.h>
#include <string.h>
#define N 10
char str[N];
int main()
{void sort(char[]); //声明函数int i,flag;for(flag=1;flag==1;){printf("input string:\n");gets(str);if(strlen(str)>N)printf("string too long,input again!");elseflag=0; //退出循环体}sort(str);printf("string sorted:\n");for(i=0;i<N;i++)printf("%c",str[i]);printf("\n");return 0;
}void sort(char str[])
{int i,j;
char t;
for(j=1;j<N;j++) //与上例相同for(i=0;i<N-j;i++)if(str[i]>str[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;}
}
输出结果:
这就是起泡法的大致流程,排序的算法有很多,重要的是要了解和掌握解题思路,学会分析问题,建立算法,以及如何利用c语言的编程的技巧。
c语言数的排序问题(起泡法)相关推荐
- C语言冒泡排序(起泡法)
C语言冒泡排序(起泡法) 冒泡法排序是C语言中较简单的 排序算法 的 . 定义:它重复地走访过要排序的元素列,依次比较两个相邻的元素,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾.如此 ...
- C语言排序之冒泡法(起泡法)
C语言排序之冒泡法(起泡法)@C语言排序之冒泡法(起泡法) 冒泡的本质还是两两比较,第一次把最大或最小的选出来,第二次把老二选出来,这样的话就会少比一次,就这样循环下去就行啦,无非就是循环的嵌套,下面 ...
- (19)写一个函数,用”起泡法“对输入的10数字符按由小到大顺序排列
用"起泡法"对输入的10数字符按由小到大顺序排列 起泡法:即每一次将相邻两个数进行比较,若符合条件则交换两个数的值.每进行一趟排序,最大的一个数变成最后一个数.以此类推,直至整个数 ...
- C语言>>写一函数,用“起泡法”对输入的10个字符由小到大排序。
使用工具: Dev-C++ 5.11 解题思路: "起泡法"思路为:将相邻两个数比较,将较小的调到前头,较大的放到后头.经过1轮比较后,最大的数便调到最后一个位置.所以n个数要比较 ...
- C语言定义起泡法函数对n个数,C语言程序设计第10讲.ppt
C语言程序设计第10讲 7.4.3 对被调用函数的说明 自定义函数: float factorial ( int n ) { float x, y ; for( x=y=1.0; x<=n; x ...
- 写一个函数,用“起泡法”对输入的10个字符按由小到大顺序排列
写一个函数,用"起泡法"对输入的10个字符按由小到大顺序排列(C语言) 题目要求:如标题,起泡法是一种重要的.基本的的排序算法 思路: 每次将相邻两个数比较,将较小的调到前面 若有 ...
- c语言创造线性表储存复数,《c语言数结构》第02章 线性表.ppt
<c语言数结构>第02章 线性表 第1章回顾 数据结构课程-- 数据结构+算法=程序,涉及数学.计算机硬件和软件. 数据结构定义--指互相有关联的数据元素的集合,可用data_Struct ...
- C语言答案写成科学记数法,c语言科学记数法_C语言中、科学计数法123456e+002具体代表什么意思、或者说怎么理解这个数_淘题吧...
『壹』 c语言用double写了一个表示科学计数法的程序,但是却读不出来30位以上的数,怎么办 double 是抄64 位(8字节),52 位代表有袭效数位,11 位表示指数,一位表示符号,精度(有效 ...
- 起泡法排序(十个数)
#include<stdio.h> int main(void){int i,j,t;int a[10];printf("Please enter ten numbers:\n& ...
最新文章
- skywalking原理_Skywalking系列博客6手把手教你编写 Skywalking 插件
- exchange2007收件人管理
- 从零开始入门 K8s | 理解容器运行时接口 CRI
- php的webservice的soapheader认证问题
- 你们数学老师当年是怎么叫这些符号的…
- PHP中类重写方法,php中重写方法有什么规则
- react中的render-props模式
- Android判断设备是否打开WIFI、GPRS数据连接
- (12)自定义数据流(实战Docker事件推送的REST API)——响应式Spring的道法术器...
- 无代码开发究竟是不是伪需求?
- linux 扫描开放的端口命令,在Linux系统中检查(扫描)开放端口的方法
- 不同应用系统之间数据交互的几种方式
- Web前端开发规范之文件存储位置规范
- Tensorflow-slim 学习笔记(一)概述
- 关于模板类中,子类无法访问父类成员问题的解决方法
- Mac卸载Anaconda
- 儒家学派有哪些代表人物?
- [转载]浙江杭西高2011年5月高二地理(徐霞客游记TV版-
- Python爬虫系列之得物小程序data算法
- Python 学习单词记忆