王俊杰


私信TA

用户名:2108182086

访问量:254

签 名:

等  级
排  名 15040
经  验 856
参赛次数 6
文章发表 2
年  龄 0
在职情况 学生
学  校 河南农业大学
专  业 物联网

  自我简介:

TA的其他文章

解题思路:解题关键还是在第二个函数——进行处理。

根据题目我们要处理的是找出最大值or最小值,之后按要求交换位置即可;再仔细观察我们不难发现最大值和最小值要求其实差不多,那么我们的问题就变成

  1. 找最小值——利用数组,假设第一位为最小值,然后不断比较

  2. 保存最小值位置——找到最小值后,用个数记录当前位置;

  3. 之后与第一位交换

  4. 最大值也是类似


参考代码:

#include<stdio.h>
#define n 10

//输入 

int in(int a[100]){
	int i;
	for(i=0;i<n;i++){
		scanf("%d",a[i]);
	}
	return 0;
}

//主要排序交换函数 

int change(int a[100]){
	int max,min;
	int x=0;         //记录最大or最小值的位置 
		int temp,i;
	min=a[0];        //假设最小值是第一位,之后一个一个比较 
	for(i=1;i<n;i++){
		if(a[i]<min){
			min=a[i];
			x=i;
		}
	}
		//这里注意应该是确定最小值后交换,避免重复交换 
		
		temp=a[0];    //与第一位交换     
		a[0]=a[x];
		a[x]=temp;
		
	//从上面可以确定第一位是最小值,所以从第二位开始假设 
	max=a[1];
	for(i=2;i<n;i++){
		if(a[i]>max){
			max=a[i];
			x=i;
		}
}
		temp=a[9];      //与最后一位交换 
		a[9]=a[x];
		a[x]=temp; 
	return 0;
}
int out(int a[100]){
	int i;
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	return 0;
}
int main(){
	int a[n];
	in(a);
	change(a);
	out(a);
	return 0;
}

但个人感觉代码有些冗余,而且本人不太会用指针,如有更好的,欢迎讨论

 

0.0分

1 人评分

  评论区

  • «
  • »