PTA习题7-1 选择法排序 (20 分)

习题7-1 选择法排序 (20 分)

本题要求将给定的n个整数从大到小排序后输出。

输入格式:

在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

4
5 1 7 6

输出样例:

7 6 5 1

 答案一(使用函数的版本):

#include<stdio.h>
#define MAXN 10//因为题目说不超过10个,故下此宏定义
int arrage(int a[],int n);//函数定义
int main(void)
{
	int a[MAXN],i,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)//利用循环输入数组
	{
		scanf("%d",&a[i]);
	}
	arrage(a,n);//利用函数对数组排序
	for(i=0;i<n-1;i++)//利用循环输出数组(n-1是为了最后单独输出最后一个数字避免行末出现多余空格)
	{
		printf("%d ",a[i]);
	} 
	printf("%d",a[i]);//由于题目最后不能留有空格,故最后一个数字单独输出
	return 0;
} 
int arrage(int a[],int n)
{
	int i,index,j,temp;
	for(i=0;i<n-1;i++)
	{
		index=i;//记录每次比大小的首位的下标
		for(j=i+1;j<n;j++)//利用循环和上述首位的后面的所有位比大小
		{
			if(a[j]>a[index])
			{
				index=j;//记录大的那一方的下标(题目要求从大到小,当然从小到大排,最后从后往前输出也是可以的)
			}
		}
		temp=a[index];//交换两个数字
		a[index]=a[i];
		a[i]=temp;
	}
	return a[n];//返回排列好的数组
}

答案二(未使用函数的版本):

Ps:未使用函数的版本其实大部分来源于上面使用函数的部分。

#include<stdio.h>
#define MAXN 10//因为题目说不超过10个,故下此宏定义
int main(void)
{
	int a[MAXN],i,n,index,j,temp;
	scanf("%d",&n);
	for(i=0;i<n;i++)//利用循环输入数组
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n-1;i++)//对数组排序
	{
		index=i;
		for(j=i+1;j<n;j++)
		{
			if(a[j]>a[index])
			{
				index=j;
			}
		}
		temp=a[index];
		a[index]=a[i];
		a[i]=temp;
	}
	for(i=0;i<n-1;i++)//利用循环输出数组(n-1是为了最后单独输出最后一个数字避免行末出现多余空格)
	{
		printf("%d ",a[i]);
	} 
	printf("%d",a[i]);//单独输出最后一个数字(没有空格)
	return 0;
} 

  • 31
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值