选择排序-算法

从小到大 

3df6fe33e9714c95aed7f5bed528c1bf.png

d7284186bb7248cea59eb8e15b67f2b6.png

675a6949e8014ae7bf53927de22282b3.png

#include <stdio.h>
int main()
{
	int a[10]={10,5,88,97,46,32,82,3,15,66};
	int i,j,k,t;
//	for(i=0;i<10;i++)
//	{
//		scanf("%d",&a[i]);	
//	} 
	for(i=0;i<9;i++)
	{
		k=i;
		for(j=i+1;j<=9;j++)
		{
			if(a[j]<a[k])
			{
				k=j;
			}
		}
		if(k!=i)
		{
			t=a[i];
			a[i]=a[k];
			a[k]=t;
		}
	}
	for(i=0;i<10;i++)
	{
		printf("%d\n",a[i]);
	}
	return 0;
 } 

 

 从大到小

将最大的数排在第一位: 

#include <stdio.h>
#define num 8
int main()
{
	int a[num]={12,4,6,8,11,54,43,76};
	int i,j,max,temp;
	for(i=0;i<num-1;i++)
	{
		max=i;
		for(j=i+1;j<num;j++)
		{
			if(a[j]>a[max])
			{
				max=j;
			}
		}
		temp=a[max];
		a[max]=a[i];
		a[i]=temp;
	}
	for(i=0;i<num;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}

 

将最大的数排在最后一位,按从小到大顺序:

来自mooc,翁凯老师的代码 

#include <stdio.h>

int max(int a[],int len)
{
	int maxid = 0;    //先假设数组内最大的数的下标为0; 
	for (int i=1;i<len;i++)  //让i从下标1开始判断 
	{
		if (a[i] > a[maxid])   //当i对饮下标的数大于maxid对应的数,则最大数的下标(maxid)为当前i的下标 
		{
			maxid = i;      
		}
	}
	return maxid;   
 } 
 
 int main()
 {
 	int a[]={2,45,6,12,87,34,90,24,23,11,65};  
 	int len = sizeof(a)/sizeof(a[0]); //数组的长度 
 	
 	for (int i=len-1;i>0;i--)   //i是数组目前最大的下标,当排序时,最大的数挪到最大的下标时,i就下标-1,也就变成倒数第二个下标 
	{
		int maxid = max(a,i+1);  //调用函数并且,maxid的意思是当前数组范围内最大的数的下标 
		int t = a[maxid];     //现将最大的数的值保存起来 
		a[maxid] = a[i];  //让最大的数的位置与最后一个位置的数互换 
		a[i] = t;    //每次互换后,i为1,因为最大数已经挪到最后一个位置上。并且最后一次循环时,满足i为1,则数组内还剩2个数去判断。 
	}               //循环结束时,i为0, 则数组内还是最后一个数。也就不用判断了。 
	for (int i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
 	return 0;
 }

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值