选择排序法
选择排序法的方式是在一堆无序的数组中找到最小(最大)的值,然后通过交换来实现排序,记住是交换
它是一种不稳定的排序算法,额,这里崩出个不稳定是个啥,看到有个通俗的解释是,有 A、B、C三位同学,他们的成绩是 85 85 80,然后使用选择排序法(从低到高)后就是CBA,其中 A 和 B同学成绩一样,他们的顺序应该不要变动,所以:
稳定排法:CAB
不稳定排法:CBA
一小段排序实现,比较简单,直接上代码
// 选择排序法
void sort(int* buf, int len)
{
int min_index = 0; // 在未排序的数组中最小元素下标
int min_value = 0; // 在未排序的数组中最小元素值
for (int i = 0; i < len - 1; ++i) {
min_index = i;
min_value = buf[i]; // 每次假定这个值最小
for (int j = i + 1; j < len; ++j) {
if (min_value > buf[j]) { // 发现有比 min_value 更小的值
min_value = buf[j]; // 记录这个值
min_index = j; // 记录这个下标
}
}
// 如果 min_value 的下标和上面假定那个值的下标不同,则说明有更小的值,所以进行交换
if (min_index != i) {
buf[min_index] = buf[i];
buf[i] = min_value;
}
}
}
测试主函数
// 主函数
int main(int argc, char* argv[])
{
int buf[] = { -64, 2, 5, 3 ,-2 };
int len = sizeof(buf) / sizeof(int);
sort(buf, len);
for (int i = 0; i < len; ++i) {
cout << buf[i] << " ";
}
return 0;
}
运行结果