选择排序

基本思想:

假设有4个元素,其序列4、2、5、1. 我们以第一个元素(即4)开始,看它后面有没有比它还小的(在比它小的数中选最小那个),然后选择1,让4和1交换,如此,序列变成了1、2、5、4了(当然如果后面没有比4小的数,就不用交换,即原序列不变)。我们再以第二个元素开始(即2),再扫描后面的元素(与第一步做法类似)……,序列变成

1、2、5、4,(就是没变,因为2后面没有比它更小的)。再以第三个数(即5)开始……,序列变成1、2、4、5.再以第四个数(即5)开始,后面没数了,结束!

共找了3(即4-1)遍。


//实现代码:
#include<stdio.h>
#define MAXSIZE 100 //定义数组最大容量
int a[MAXSIZE];  
int main()
{
	int i,j,temp,n;
	printf("请输入元素的个数:");
	scanf("%d",&n);
	printf("请输入这%d个元素:",n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	int m;  //记录当前比较时,最小那个数的下标
	for(j=0;j<n;j++)
	{
		m=j;  //就先假设a[j]最小,所以记录它的下标j
		for(j=0;j<n-1;j++) //共找了n-1遍
		{//让a[j]即a[m]与它后面的数a[i]逐个比较,选出最小那个,把它的下标i赋给m
			if(a[i]<a[m])
				m=i;
		}
		if(m!=j)//就是说,如果刚才找的最小下标m不是j的话,就让a[j]与a[m]交换
		{
			temp=a[j];
			a[j]=a[m];
			a[m]=temp;
		}
	}
	printf("排序后的序列为:");
	for(i=0;i<n;i++) //输出排序后的序列
		printf("%d ",a[i]);
	printf("\n");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值