c语言交换排序的问题?

http://img.mukewang.com/582b02140001565c10980648.jpg

实在是有点困扰。。






慕粉1474272606
浏览 1311回答 3
3回答

Lemon156

望采纳 #include<stdio.h> int main(){ int g,i,k,l,m,n,temp;//g存储最大值的下标,l存储最小值的下标 int a[20];//定义数组最多存放20个元素 printf("input n :    "); scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i]); } for(i=0;i<n;i++){ if(i==0){ m=a[i]; l=i; k=a[i]; g=i; } if(a[i]>m){ m=a[i]; g=i; } if(a[i]<k){ k=a[i]; l=i; } } temp=a[0]; a[0]=a[l]; //最小值与第一个元素交换 a[l]=temp; temp=a[n-1]; a[n-1]=a[g]; //最大值与最后一个元素交换 a[g]=temp; printf("排序后:\n"); for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); return 0; }

Lemon156

只需加个判断就可以了#include<stdio.h> int main(){     int g,i,k,l,m,n,temp;//g存储最大值的下标,l存储最小值的下标     int a[20];//定义数组最多存放20个元素     printf("input n (2~20) :   ");     scanf("%d",&n); if(n<2||n>20){ printf("输入错误\n请输入n为2~20之间的数!!!\n");  //判断是否是输入2~20之间的数,不是则退出 return 0; }     for(i=0;i<n;i++){         scanf("%d",&a[i]);  //存储输入的数     } if(n==2){ //如果是输入两个数,只需进行排序 if(a[1]>a[0]){ printf("%d  %d\n",a[0],a[1]); } else{ printf("%d  %d\n",a[1],a[0]); } } else{ //当n>2时 for(i=0;i<n;i++){ if(i==0){ m=a[i]; l=i; k=a[i]; g=i; } if(a[i]>m){  m=a[i]; g=i; } if(a[i]<k){ k=a[i]; l=i; } } temp=a[0]; a[0]=a[l];  //最小值与第一个元素交换 a[l]=temp;   temp=a[n-1]; a[n-1]=a[g];    //最大值与最后一个元素交换 a[g]=temp;   printf("排序后:\n"); for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n");     }     return 0; }
打开App,查看更多内容
随时随地看视频慕课网APP