6-2
选择法进行排序
一、什么是选择法?
从待排序的一串数据中,找出最大元素的位置(注意是位置,不是元素的值),若该数据不在这串数的末尾,则将它与最后一个元素互换(升序)。可以用for循环遍历寻找。
如何实现?
先设置maxpos 来保证存最大值的位置
先设置为0
int maxpos = 0;
再设置一个循环,遍历数组,找到这一组数据里的最大值
int a[10] = {2, 4, 6, 5, 7, 2, 9, 6, 4, 5};
int maxpos = 0;
int t = 0, size = 10;
for (int j = 1; j < size - i; j++) {
if (a[maxpos] < a[j]) //找出除了第一个数以外,最大的数
maxpos = j;
}
注意: 最后一个数组元素是size -1
再将maxpos 指向的最大的数与最后一个数字进行调换
t = a[maxpos];
a[size - 1 - i] = t; //与最后一个数字进行调换,调换i次,已经调换不用再换,把数字换到上一个调换到最后的数值前
a[maxpos] = t;
整个for循环为
for (int i = 0; i < size - i; i++) { //控制循环次数
for (int j = 1; j < size - i; j++) {
if (a[maxpos] < a[j]) //找出除了第一个数以外,最大的数
maxpos = j;
}
t = a[maxpos];
a[size - 1 - i] = t;
a[maxpos] = t;
}
输出
for (int i = 0; i < 10; i++) {
printf("%d", a[i]);
}
所以代码为:
int a[10] = {2, 4, 6, 5, 7, 2, 9, 6, 4, 5};
int maxpos = 0;
int t = 0, size = 10;
for (int i = 0; i < size - i; i++) { //控制循环次数
for (int j = 1; j < size - i; j++) {
if (a[maxpos] < a[j]) //找出除了第一个数以外,最大的数
maxpos = j;
}
t = a[maxpos];
a[size - 1 - i] = t;
a[maxpos] = t;
}
for (int i = 0; i < 10; i++) {
printf("%d", a[i]);
}
运行结果