选择排序.原理讲解

背景

一天,老师要李小明把10000个同学的成绩从高到底排序。

李小明蒙了:“这么大,我不行呀!”

正文

啊,哈喽,小伙伴们大家好。我是#张亿,今天呐,学的是选择排序.原理讲解

这就像我们排队是从高到矮一样,将同一类型的数据按一定顺序(从大到小或从小到大)排列称为排序。排序的算法有很多,其中选择排序是一种较简单的方法。

例如:输入 5 个正整数,把这 5 个数按由大到小的顺序排列。

分析:要把5个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,...... 。因此,我们第一步可将第一个位置的数与其后的各个数依次比较,若发现有数比它大的,则互相交换位置,这样结束后,第一个位置的数就是最大的数。

用1号数据和后面2到5号的数据依次比较,确定 “第一大” 的数据。

第一次是 1 号和 2 号比较,50 > 30,所以数据不变。

第二次是 1 号和 3 号比较,50 > 10,所以交换不变。

第三次是 1 号和 4 号比较,50 > 40,所以数据不变。

第四次是 1 号和 5 号比较,50 > 20, 所以数据不变。

做完上面的事情之后,确定第一大的数据是 50,而且最大的数据已经放在了最前面的位置。

下标12345
数据5010204050

用 2 号数据和后面 3 到 5 号的数据比较,确定 “第二大”的 数据。

确定第二大的数据是 40

下标12345
数据5040102040

......

经过多轮比较,最后确定的顺序是:

下标12345
数据5040302010

这种排序方法叫选择排序:(从大到小)

for (int i=1;i<=n-1;i++)    //确定第i个位置的数据
	for(int j=i+1;j<=n;j++)   //将第i个数与其后所有数比较
		if (a[i]<a[j])          //若a[j]比a[i]大,则交换数据
		{
			t=a[i];
			a[i]=a[j];
			a[j]=t;
		}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值