前言
题目
![图片[1],冒泡排序的实例(以及冒泡排序的优化),网络安全爱好者中心-神域博客网](https://img.godyu.com/2023/11/20231108093001886.png?imageView2/0/format/webp/q/75)
先附上两位朋友的冒泡解析:
By:Settingsun
By:灰太狼
118普通答案+解析
有什么不懂可以问我
#include <stdio.h>void insert(int a[],int n,int num){ int t; //定义一个中间变换值用来达到a[j]和a[j}+1的顺序替换a[n] =num;n=n+1; //插入一个数,需给他加一for(int i=0;i<n;i++) //这里不是n-1 因为这里不是数组是循环几次{for(int j=0;j<n-1;j++) //n-1 因为数组是从0开始{if(a[j]>a[j+1]) //下面就是简单的替换顺序{t=a[j];a[j]=a[j+1];a[j+1]=t;}}}}void printarr(int a[],int n){for(int h=0;h<n+1;h++){printf("%d",a[h]);if(h<n){printf(" "); //这里是输入空格 如果直接输出空格的话,第一个数会有空格}}}int main(){int n;scanf("%d",&n);int a[n];for(int h=0;h<n;h++){scanf("%d",&a[h]);}int num;scanf("%d",&num);insert(a,n,num); //调用函数printarr(a,n); //这里也是调用return 0;}#include <stdio.h> void insert(int a[],int n,int num) { int t; //定义一个中间变换值用来达到a[j]和a[j}+1的顺序替换 a[n] =num; n=n+1; //插入一个数,需给他加一 for(int i=0;i<n;i++) //这里不是n-1 因为这里不是数组是循环几次 { for(int j=0;j<n-1;j++) //n-1 因为数组是从0开始 { if(a[j]>a[j+1]) //下面就是简单的替换顺序 { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } void printarr(int a[],int n) { for(int h=0;h<n+1;h++) { printf("%d",a[h]); if(h<n) { printf(" "); //这里是输入空格 如果直接输出空格的话,第一个数会有空格 } } } int main() { int n; scanf("%d",&n); int a[n]; for(int h=0;h<n;h++) { scanf("%d",&a[h]); } int num; scanf("%d",&num); insert(a,n,num); //调用函数 printarr(a,n); //这里也是调用 return 0; }#include <stdio.h> void insert(int a[],int n,int num) { int t; //定义一个中间变换值用来达到a[j]和a[j}+1的顺序替换 a[n] =num; n=n+1; //插入一个数,需给他加一 for(int i=0;i<n;i++) //这里不是n-1 因为这里不是数组是循环几次 { for(int j=0;j<n-1;j++) //n-1 因为数组是从0开始 { if(a[j]>a[j+1]) //下面就是简单的替换顺序 { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } void printarr(int a[],int n) { for(int h=0;h<n+1;h++) { printf("%d",a[h]); if(h<n) { printf(" "); //这里是输入空格 如果直接输出空格的话,第一个数会有空格 } } } int main() { int n; scanf("%d",&n); int a[n]; for(int h=0;h<n;h++) { scanf("%d",&a[h]); } int num; scanf("%d",&num); insert(a,n,num); //调用函数 printarr(a,n); //这里也是调用 return 0; }
118优化答案加解析
这里的优化目的是增加运行速度
#include <stdio.h>void insert(int a[],int n,int num){ int t; //定义一个中间变换值用来达到a[j]和a[j}+1的顺序替换a[n] =num;n=n+1; //插入一个数,需给他加一for(int i=0;i<n;i++) //这里不是n-1 因为这里不是数组是循环几次{ int flag=1;//定义一个标识符for(int j=0;j<n-1;j++) //n-1 因为数组是从0开始{if(a[j]>a[j+1]) //下面就是简单的替换顺序{ flag=0;//改变标识符t=a[j];a[j]=a[j+1];a[j+1]=t;}}if(flag==1){ //如果标识符等于1那就不用进行循环了break;}}}void printarr(int a[],int n){for(int h=0;h<n+1;h++){printf("%d",a[h]);if(h<n){printf(" "); //这里是输入空格 如果直接输出空格的话,第一个数会有空格}}}int main(){int n;scanf("%d",&n);int a[n];for(int h=0;h<n;h++){scanf("%d",&a[h]);}int num;scanf("%d",&num);insert(a,n,num); //调用函数printarr(a,n); //这里也是调用return 0;}#include <stdio.h> void insert(int a[],int n,int num) { int t; //定义一个中间变换值用来达到a[j]和a[j}+1的顺序替换 a[n] =num; n=n+1; //插入一个数,需给他加一 for(int i=0;i<n;i++) //这里不是n-1 因为这里不是数组是循环几次 { int flag=1;//定义一个标识符 for(int j=0;j<n-1;j++) //n-1 因为数组是从0开始 { if(a[j]>a[j+1]) //下面就是简单的替换顺序 { flag=0;//改变标识符 t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } if(flag==1){ //如果标识符等于1那就不用进行循环了 break;} } } void printarr(int a[],int n) { for(int h=0;h<n+1;h++) { printf("%d",a[h]); if(h<n) { printf(" "); //这里是输入空格 如果直接输出空格的话,第一个数会有空格 } } } int main() { int n; scanf("%d",&n); int a[n]; for(int h=0;h<n;h++) { scanf("%d",&a[h]); } int num; scanf("%d",&num); insert(a,n,num); //调用函数 printarr(a,n); //这里也是调用 return 0; }#include <stdio.h> void insert(int a[],int n,int num) { int t; //定义一个中间变换值用来达到a[j]和a[j}+1的顺序替换 a[n] =num; n=n+1; //插入一个数,需给他加一 for(int i=0;i<n;i++) //这里不是n-1 因为这里不是数组是循环几次 { int flag=1;//定义一个标识符 for(int j=0;j<n-1;j++) //n-1 因为数组是从0开始 { if(a[j]>a[j+1]) //下面就是简单的替换顺序 { flag=0;//改变标识符 t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } if(flag==1){ //如果标识符等于1那就不用进行循环了 break;} } } void printarr(int a[],int n) { for(int h=0;h<n+1;h++) { printf("%d",a[h]); if(h<n) { printf(" "); //这里是输入空格 如果直接输出空格的话,第一个数会有空格 } } } int main() { int n; scanf("%d",&n); int a[n]; for(int h=0;h<n;h++) { scanf("%d",&a[h]); } int num; scanf("%d",&num); insert(a,n,num); //调用函数 printarr(a,n); //这里也是调用 return 0; }
THE END
- 最新
- 最热
只看作者