对于c语言循环方面的题型,会涉及到两种排序方法,以下为我所总结的模板和笔记供大家学习:
一、冒泡排序法:
原理:从a[0]开始从左向右比较,然后按照要求,最终符合的数会在最后一个冒泡,然后又从第一个(a[1])数开始向右相邻比较,然后符合的数据在倒数第二的冒泡,依此类推。
对于冒泡排序法,我们将这个方法分为以下步骤:
①明确排序的对象为多少个
②构建双重循环
③完成输出
程序模板如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36#include <stdio.h> int main() { //定义需要的元素个数 int n; scanf("%d",&n); int a[n]; //输入对应个数的元素 for(int i = 0;i < n;i++) { scanf("%d",&a[i]); } //双重循环进行比较: for(int i = 0;i < n - 1;i++) //需要比较的次数为n - 1次 { for(int j = 0;j < n - 1 - i;j++) //数组中对应的数比较的次数为n - 1 - i { if(a[j] < a[j + 1]) //此为降序排列 升序同理 { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } //输出结果: for(int i = 0;i < n;i++) { printf("%d ",a[i]); } return 0; }
二、选择排序法:
原理(升序):有10个元素a[0]-a[9],将a[0]与a[1]到a[9]的数都进行比较,如果a[0]比a[1]到a[9]都小,则不进行任何操作。若a[1]-a[9]中有比a[0]小的,则让最小的一个与a[1]交换,此时a[1]就为10个数中最小的一个。a[1]的比较同理,以此类推。
程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35#include <stdio.h> int main() { //定义需要的元素个数 int n; scanf("%d",&n); int a[n]; //输入对应个数的元素 for(int i = 0;i < n;i++) { scanf("%d",&a[i]); } //双重循环进行比较: for(int i = 0;i < n - 1;i++) //需要比较的次数为n - 1次 { for(int j = i + 1;j < n;j++) //数组中对应的数只会与角标比他大的数比 { if(a[i] < a[j]) //此为降序排列 升序同理 { int t = a[j]; a[j] = a[i]; a[i] = t; } } } //输出结果: for(int i = 0;i < n;i++) { printf("%d ",a[i]); } return 0; }
可以看出:两个排序方法最根本的差异是双重循环部分:
冒泡排序法:外层循环要循环n - 1次 —— 要进行n - 1次比较,最后剩的那个数不需要比较
内层循环要循环n - 1 - i次 ——确定后的数不需要再进行比较
根据原理,互换值的是相邻的两个数
选择排序法:外层循环要循环n - 1次 —— 要进行n - 1次比较,最后剩的那个数不需要比较
内层循环根据原理,每个数只会与他之后的数比较,符合要求的值互换,角标不变。所以从 i + 1开始比较,直到与最后一个数比较完成
根据原理,互换值的是相比较的两个数,一个用的a[i]来记录与每个数比较的那一个数,用 a[j]记录被比较的数,所以是这两者彼此互换数值,区别于冒泡排序的相邻替换
最后
以上就是寂寞睫毛最近收集整理的关于C语言期末考试必备模板:排序法(初学者适用)(冒泡、选择)的全部内容,更多相关C语言期末考试必备模板内容请搜索靠谱客的其他文章。
发表评论 取消回复