C语言习题:数组与选择排序、冒泡排序
题目
1.选择法排序。输入一个正整数n(1<n≤10),再输入n个整数,将它们从大到小排序后输出。试编写相应程序。
2.冒泡法排序。输入一个正整数n(1<n≤10),再输入n个整数,将它们从小到大排序后输出。试编写相应程序。
分析
选择排序
选择排序法的步骤如下:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
冒泡排序
冒泡排序法的步骤如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
了解了原理,那么就好办了:
示例代码
选择排序,从大到小
#include <stdio.h> void num_sort(int *ip, int n); int main(void) { int n; printf("Please enter an integer N (1-10):"); scanf("%d", &n); if (n < 1 || n > 10) { printf("ERROR!\n"); return -1; } //定义并初始化数组及其指针 int num[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int *ip = num; //输入数据进入数组 for (int i = 0; i < n; i++) { printf("Please enter the %dth number(0-9999):", i + 1); scanf("%d", &num[i]); if (num[i] < 0 || num[i] > 9999) { printf("ERROR!\n"); return -1; } } //排序 num_sort(ip, n); //输出结果 printf("\n\n============================================\n"); printf("The sorting result is:"); for (int i = 0; i < n; i++) { printf("%d ", num[i]); } printf("\n"); getchar(); return 0; } //选择排序:从大到小 void num_sort(int *ip, int n) { int temp; for (int i = 0, max = 0; i < n; i++, max = 0) { //取数组中的最大数 for (int j = i; j < n; j++) { if (max < ip[j]) { max = ip[j]; } } //找到最大数,并将其提前 for (int j = i; j < n; j++) { if (max == ip[j]) { temp = ip[i]; ip[i] = ip[j]; ip[j] = temp; } } } }
冒泡排序,从小到大
#include <stdio.h> void num_sort(int *ip, int n); int main(void) { int n; printf("Please enter an integer N (1-10):"); scanf("%d", &n); if (n < 1 || n > 10) { printf("ERROR!\n"); return -1; } //定义并初始化数组及其指针 int num[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int *ip = num; //输入数据进入数组 for (int i = 0; i < n; i++) { printf("Please enter the %dth number(0-9999):", i + 1); scanf("%d", &num[i]); if (num[i] < 0 || num[i] > 9999) { printf("ERROR!\n"); return -1; } } //排序 num_sort(ip, n); //输出结果 printf("\n\n============================================\n"); printf("The sorting result is:"); for (int i = 0; i < n; i++) { printf("%d ", num[i]); } printf("\n"); getchar(); return 0; } //冒泡排序:从小到大 void num_sort(int *ip, int n) { int temp; for (int i = 0; i < n; i++) { for (int j = 0; j < n - i - 1; j++) { //交换相邻的两个数 if (ip[j] > ip[j + 1]) { temp = ip[j]; ip[j] = ip[j + 1]; ip[j + 1] = temp; } } } }
以上两个程序的区别仅在函数num_sort()
中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义