1、简单选择排序
简单选择排序思想是:从头到尾(从后往前也行)遍历序列,先固定第一个位置的数据,将该位置后面的数据,依次和这个位置的数据进行比较,如果比固定位置的数据大,就交换。这样,进行一趟排序以后,第一个位置就是最小的数了。然后重复进行,第 2 次遍历并且比较后,第二个位置就是第二小的数字了,,依次类推
比较简单,直接上代码吧:
void selectsort(int a[], int n)
{
for (int i = 0; i < n-1; i++)
{
int min = i; // 保留一份开始下标的副本
for (int j = i + 1; j < n; j++) // 从该值后面的数据开始遍历
{
if (a[j] < a[min])
min = j;
}
if (i != min)
swap(a[i],a[min]); // 第 i 个位置就是这一轮最小的数字了
}
}
2、堆排序
堆排序的原理不赘述了,不太明白的同学可以参考链接:堆与堆排序
下面,说一下利用 STL 实现堆排序。
STL中与堆相关的4个函数——建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap():
头文件 #include <algorithm>