选择法&双端选择法&数组排序

C语言编程
*

选择法&双端选择法&数组排序

题目:编写c程序,输入十个整数,每轮挑出最小和最打大的两个数,分别置于数组两端,经过5轮完成数组的排序并输出。
考虑如何修改程序以提高效率。
编者给出的代码:

# include <stdio.h>//两端选择法数组排序 
int main(void)
{
	//int a[10]={0,9,8,7,6,5,4,3,2,1};//定义数组,非动态赋值! 
	int n,m,i,q,b,c,max,min;
	int a[10];
	for(i=0;i<10;i++)//动态赋值! 
	scanf("%d",&a[i]);
	for(i=0,n=0;i<5;i++){
		max=a[n];min=a[9-n];//动态改变max,min 
		b=n;c=9-n;
		for(m=n;m<10-n;m++){//寻找当前轮次的最大值与最小值,记录其下标 
			if(max<a[m]){
				max=a[m];
				b=m;
			}
			if(min>a[m]) {
				min=a[m];
				c=m;
			}
		}
		if(c==n) c=b;//防止下标改变而追踪不到	    
		q=a[n];
		a[n]=max;
		a[b]=q;//交换最大值位与本轮首位的值 
		q=a[9-n];
		a[9-n]=min;
		a[c]=q;
		n+=1;//交换最小值位与本轮末位的值 
	}
	for(i=0;i<10;i++)//顺序输出数组a[10] 
	printf("  %d",a[i])return 0;
 } 

| 方法分析:
选择法:通过定义一个max或min来寻找整个数组中的最小值,即选着出数组中的最小值或最大值;
疑难解答:
十个整数,通过5轮选择;每一轮的开始要刷新本轮的max、min值以及本轮的最大值最小值下标;合理选着字符变量加以控制是关键;
出现特殊情况:
最小值下标为本轮首位的下标,则按照代码顺序,最小值已经被掉离,而记录的下标未及时改变导致出现错误!
特殊情况解决办法:
在选出max、min值以后添加if判断,若最小值下标为本轮首位,则追踪最小值下标!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值