背景
一天,老师要李小明把10000个同学的成绩从高到底排序。
李小明蒙了:“这么大,我不行呀!”
正文
啊,哈喽,小伙伴们大家好。我是#张亿,今天呐,学的是选择排序.原理讲解
这就像我们排队是从高到矮一样,将同一类型的数据按一定顺序(从大到小或从小到大)排列称为排序。排序的算法有很多,其中选择排序是一种较简单的方法。
例如:输入 5 个正整数,把这 5 个数按由大到小的顺序排列。
分析:要把5个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,...... 。因此,我们第一步可将第一个位置的数与其后的各个数依次比较,若发现有数比它大的,则互相交换位置,这样结束后,第一个位置的数就是最大的数。
用1号数据和后面2到5号的数据依次比较,确定 “第一大” 的数据。
第一次是 1 号和 2 号比较,50 > 30,所以数据不变。
第二次是 1 号和 3 号比较,50 > 10,所以交换不变。
第三次是 1 号和 4 号比较,50 > 40,所以数据不变。
第四次是 1 号和 5 号比较,50 > 20, 所以数据不变。
做完上面的事情之后,确定第一大的数据是 50,而且最大的数据已经放在了最前面的位置。
下标 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
数据 | 50 | 10 | 20 | 40 | 50 |
用 2 号数据和后面 3 到 5 号的数据比较,确定 “第二大”的 数据。
确定第二大的数据是 40
下标 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
数据 | 50 | 40 | 10 | 20 | 40 |
......
经过多轮比较,最后确定的顺序是:
下标 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
数据 | 50 | 40 | 30 | 20 | 10 |
这种排序方法叫选择排序:(从大到小)
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;
}
标签:下标,12345,50,讲解,原理,排序,数据,比较 From: https://blog.csdn.net/dh3_zhang/article/details/139263317