解题思路:
①:从第一个数开始,每一个数依次与它后面一个数比较,比它后面的大,则交换
②:n个数,排序n-1趟(当序列逆序的时候)
③:若在一趟遍历中没有发生交换,即序列有序,则直接跳出循环,后面的趟数不再进行
④:如
1):序列:5 4 3 2 1
2):第一趟排序结果为:4 3 2 1 5
3):第二趟排序结果为:3 2 1 4 5
4):第三趟排序结果为:2 1 3 4 5
5):第四趟排序结果为:1 2 3 4 5
知识补充:
1):冒泡排序的每一趟排序,元素都能到达最终位置
2):其排序趟数与初始序列的排列顺序有关
3):比较次数也与初始序列排列顺序有关
3):冒泡排序是一个稳定排序
4):最坏时间复杂度为o(n^2),最好为o(n)
参考代码:
#include<stdio.h> #include<malloc.h> void maoSort(int R[],int n); void print_(int R[],int n); int main() { int n=4;/*序列长度为4*/ /*为数组开辟空间*/ int *R=(int *)malloc(n*sizeof(int)); while(scanf("%d",&R[0])!=EOF) { /*输入数据*/ for(int i=1;i<n;i++) scanf("%d",&R[i]); /*用冒泡排序*/ maoSort(R,n); /*输出排序结果*/ print_(R,n); free(R); } return 0; } /*==================================================*/ void maoSort(int R[],int n) { int p=0;/*用于一次遍历中是否发生交换*/ int term; for(int i=0;i<n-1;i++) { p=0; for(int j=0;j<n-i-1;j++) { if(R[j]>R[j+1]) { /*进行交换*/ term=R[j]; R[j]=R[j+1]; R[j+1]=term; /*交换标志置1*/ p=1; } } /*如果没发生交换,说明序列有序,直接跳出循环*/ if(p==0) break; } } /*==================================================*/ void print_(int R[],int n) { for(int i=0;i<n-1;i++) printf("%d ",R[i]); printf("%d\n",R[n-1]); }
别忘点赞哦-.-
0.0分
62 人评分
#include<stdio.h> void swap(int &a,int &b){ int tmp; tmp = a; a = b; b = tmp; } int main() { int arr[4] = {0}; for( int i = 0; i < 4 ; i++ ){ scanf("%d",&arr[i]); } for (int i = 0; i < 4; i++) { for (int j = 1; j < 4; j++) { if(arr[j]<arr[j-1]){ swap(arr[j],arr[j-1]); } } } for (int i = 0; i < 4; i++) { printf("%2d",arr[i]); } return 0; } 为什么我这个是错的!!测试用例没毛病啊
直接用sort不香吗?
#include<stdio.h> int main() { int a[4]; int i,j,t; for(i=0;i<4;i++); { scanf("%d",&a[i]); } for(i=0;i<4;i++) { printf("%d\n",a[i]); } for(i=0;i<3;i++) { for(j=0;j<3-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(i=0;i<4;i++) { printf("%d ",a[i]); } return 0; } 这个为什么输出都是错的啊!
菜就多刷题 2022-02-26 10:05:22 |
第一个for多了个分号
#include<stdio.h> int main(void){ int a[4],n,m,t; printf("input something:\n"); for(n=0;n<4;n++){ scanf("%d",&a[n]); } for(n=0;n<4;n++){ for(m=n+1;m<4;m++){ if(a[n]>a[m]){ t=a[n]; a[n]=a[m]; a[m]=t; } } printf("%d ",a[n]); } return 0; }
zjj 2024-03-27 15:55:31 |
错了
#include<stdio.h> #define N 4 int main() { int i,j,k,temp; int line[N]; for(i=0;i<N;i++) { scanf("%d",&line[i]); } for(i=0;i<N-1;i++) { k = i; for(j=i+1;j<N;j++) { if(line[j]<line[k]) { k = j; } } if(k!=i) { temp = line[k]; line[k]=line[i]; line[i]=temp; } } for(i=0;i<N;i++) printf("%d ",line[i]); return 0; }
#include<stdio.h> int main() { int a[4],i,j,t; for(i=0;i<4;i++) scanf("%d",&a[i]); for(i=0;i<4;i++) for(j=0;j<3-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } else if(a[j]<a[j+1]) a[j]=a[j]; } for(i=0;i<4;i++) printf("%d ",a[i]); printf("\n"); return 0; }
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:481 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:686 |
【蟠桃记】 (C语言代码)浏览:697 |
【求[X,Y]内被除3余1并且被除5余3的整数的和】 (C语言代码)浏览:703 |
【计算球体积】 (C语言代码)浏览:1158 |
用筛法求之N内的素数。 (C语言代码)浏览:711 |
a+b浏览:452 |
1035 题解浏览:875 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:538 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:801 |
略有磨损 2023-09-20 11:40:59 |
超时了吧(;´༎ຶД༎ຶ`)
略有磨损 2023-09-20 11:41:15 |
超时了吧(;´༎ຶД༎ຶ`)