文章
2
粉丝
0
获赞
6
访问
221
这道题目要求分别实现直接插入排序、希尔排序(d=5)、直接选择排序、快速排序和二路归并排序算法,但实际上可以通过巧用sort和stable_sort达到一样的效果。
直接插入排序是稳定的,所以直接套用stable_sort即可。
希尔排序(d=5)讲究分组的个数为步数,也就是1234512345的分配,是可以通过遍历来分组的。我们可以使用一个大小为d=5的向量数组分别存储希尔排序中的d=5个组,(而且d可以作为常量定义在程序中,方便作为第一趟希尔排序的模板使用)这样就可以1234512345地把原数组中的元素push back到各组向量中了。之后把每个组分别sort排序。输出也需要用到team变量,按照组号12345(下标01234)这样的输出。
直接选择排序和快排都是不稳定排序,sort完之后返回结果即可。
第一趟二路归并排序并不好想,因为常见的二路归并是递归实现的,在递归树中剪枝也是高级技巧,至少我自己是不知道的。但是可以根据第i趟归并排序有组元素这个性质,知道第一趟归并排序其实只要保持相邻元素局部有序就行了。这个操作其实使用for循环和sort函数就能做到,只需要设置for循环和sort的参数来划分范围,让数组在局部保持有序即可。
一言以蔽之,这道题本来是要考察某些排序算法的代码的,但是只要我们了解排序算法的性质,就可以想办法巧用sort和stable_sort函数模拟,甚至顶替排序函数的。
#include<bits/stdc++.h>
using namespace std;
const int d=5; // 希尔排序的步数
int main(){
// 接收待排序的元素n和要排序的元素
int n;
cin >> n;
int elems[105]={0};
for (int i=0;i<n;i++){
cin >> elems[i];
}
// 直接插入排序用stable_sort
int elems_i[105]={0};
// 复制数组
for (int i=0;i<n;i++){
elems_i[i]=e...
登录后发布评论
暂无评论,来抢沙发