赞
踩
2023年的湖北省专升本考试已经于2023年5月7日结束了,学长从多为知情朋友哪里打听到一些高校的C语言程序设计题,其中这一题来自于湖北一所公办院校和民办院校。
题目:使用冒泡排序法为一组数据进行升序排序,写出最终结果。(数据朋友记不清,但是题目大致就是冒泡排序,只要知道题目是干什么的,那么我们就相当于有了正确答案的模板,遇到以后往上套就行了)
我们假设有这样一组数据:2,5,11,3,9,66,23,88,101,55
- #include<stdio.h>
- int main(){
- int arr[] = {2,5,11,3,9,66,23,88,101,55};
- int len = sizeof(arr) / sizeof(int);
- //打印一遍该数组
- for(int i=0;i<len;i++){
- printf("%-4d",arr[i]);
- }
-
- //排序
- for(int i=0;i<len;i++){ //外循环用来控制整体循环次数,即需要多少遍才能将这组数据排好序
- for(int j=i;j<len;j++){ //内循环用来控制每一次外循环中要对比多少组数据,即在这一次外循环中这组数据需要比较几次
- if(arr[i]<arr[j]){ //如果我前面的数据小于后面的数据,那么就交换两者的位置
- int temp = arr[i]; //temp用来临时存储前面一个数据的值
- arr[i] = arr[j]; //将后面的数据的值赋给前面的数据
- arr[j] = temp; //让后面数据的值等于temp中临时存储的数据值
- }
- }
- }
-
- //打印排好序后的数组数据
- printf("\n");
- for(int i=0;i<len;i++){
- printf("%-4d",arr[i]);
- }
- return 0;
- }
- /*需要注意的是第12行,变量j的值等于变量i的值,因为每完成一次外循环,就证明这组数据中最大的那个值已经被推至当前所剩数据的最前面,
- 被排过序的数据(即每次外循环完成后被推到所剩数据最前面的数据)不需要再次被排序,而被推至前面的数据的个数由变量i决定,
- 因此,下一次内循环只需要进行len-i次循环,所以我们让j=i就是控制j的初始值大小,并且j控制着每次内循环中从数组的那个位置起始,
- 我们知道被排过序的不需要再继续被排序,因此每次的起始位置因该是被排过序的数据的后面的一个数据的位置*/

如果我们对代码稍作修改,他就能编程一个排序模板,遇到任何一组数据都可以对其进行排序,而不是只限制于现在这种针对于这一组数据的排序。
- #include<stdio.h>
- int main(){
- int arr[10];
- int len = sizeof(arr) / sizeof(int);
- //利用for循环为数组赋初值
- printf("请输入一组整数:\n");
- for(int i=0;i<len;i++){
- scanf("%d",&arr[i]);
- }
- //打印一遍该数组
- for(int i=0;i<len;i++){
- printf("%-4d",arr[i]);
- }
-
- //排序
- for(int i=0;i<len;i++){ //外循环用来控制整体循环次数,即需要多少遍才能将这组数据排好序
- for(int j=i;j<len;j++){ //内循环用来控制每一次外循环中要对比多少组数据,即在这一次外循环中这组数据需要比较几次
- if(arr[i]<arr[j]){ //如果我前面的数据小于后面的数据,那么就交换两者的位置
- int temp = arr[i]; //temp用来临时存储前面一个数据的值
- arr[i] = arr[j]; //将后面的数据的值赋给前面的数据
- arr[j] = temp; //让后面数据的值等于temp中临时存储的数据值
- }
- }
- }
-
- //打印排好序后的数组数据
- printf("\n");
- for(int i=0;i<len;i++){
- printf("%-4d",arr[i]);
- }
- return 0;
- }
- /*需要注意的是第12行,变量j的值等于变量i的值,因为每完成一次外循环,就证明这组数据中最大的那个值已经被推至当前所剩数据的最前面,
- 被排过序的数据(即每次外循环完成后被推到所剩数据最前面的数据)不需要再次被排序,而被推至前面的数据的个数由变量i决定,
- 因此,下一次内循环只需要进行len-i次循环,所以我们让j=i就是控制j的初始值大小,并且j控制着每次内循环中从数组的那个位置起始,
- 我们知道被排过序的不需要再继续被排序,因此每次的起始位置因该是被排过序的数据的后面的一个数据的位置*/

在测试一组其他数据:
实际上,冒泡排序是一种十分简单的排序法,但并不是最高效的排序法,如果哦你有兴趣还可以去了解一下选择排序、插入排序、快速排序这几大最主要的排序算法思想。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。