为了账号安全,请及时绑定邮箱和手机立即绑定

c语言交换排序的问题?

c语言交换排序的问题?

C
慕粉1474272606 2016-11-15 20:40:31
实在是有点困扰。。
查看完整描述

3 回答

已采纳
?
Lemon156

TA贡献91条经验 获得超32个赞

望采纳

#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;
}


查看完整回答
1 反对 回复 2016-11-15
  • 慕粉1474272606
    慕粉1474272606
    万分感谢
  • 慕粉1474272606
    慕粉1474272606
    我试了一下 发现只有两个元素的时候不行啊
  • Lemon156
    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; }
?
Lemon156

TA贡献91条经验 获得超32个赞

只需加个判断就可以了

#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;
}


查看完整回答
1 反对 回复 2016-11-17
  • 3 回答
  • 0 关注
  • 1310 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信