1098 Insertion or Heap Sort (25)(25 分)

插入排序直接用sort即可,第一次的插入排序是前两个元素(因为插入排序是手里先拿着第一个,后序的往里面插入)
堆排序采用的是最大堆,因为要求的是从小到大的序列,每次都是堆的堆顶最大和n的元素交换

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 110;
int initial[maxn], target[maxn], temp[maxn], n;
bool issame(int a[])
{
    for (int i = 1; i <= n; i++)
    {
        if (a[i] != target[i])return false;
    }
    return true;
}
bool isinsert(int a[])
{
    bool flag = false;
    for (int i = 2; i <= n; i++)
    {
        if (i!=2&&issame(a))flag = true;
        //注意sort的范围是+i+1,因为数组序号是1-n,不是0-n
        sort(a + 1, a + i + 1);
        if (flag)return true;
    }
    return false;
}
void downAdjust(int low, int high)
{
    int i = low, j = 2 * i;
    while (j <= high)
    {
        if (j + 1 <= high&&temp[j + 1] > temp[j])j++;
        if (temp[i] < temp[j])
        {
            swap(temp[i], temp[j]);
            i = j;
            j = i * 2;
        }
        else return;
    }
}
void showarr(int a[])
{
    for (int i = 1; i <= n; i++)
    {
        printf("%d", a[i]);
        if (i != n)printf(" ");
    }
}
void Heapsort()
{
    for (int i = n / 2; i >= 1; i--)downAdjust(i, n);
    bool flag = false;
    for (int i = n; i>1;i--)
    {
        if (i!=n&&issame(temp))flag = true;
        swap(temp[1], temp[i]);
        downAdjust(1, i-1);
        if (flag == true)break;
    }
    showarr(temp);
}
int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)scanf("%d", &initial[i]), temp[i] = initial[i];
    for (int i = 1; i <= n; i++)scanf("%d", &target[i]);
    if (isinsert(initial))
    {
        printf("Insertion Sort\n");
        showarr(initial);
    }
    else
    {
        printf("Heap Sort\n");
        Heapsort();
    }
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,288评论 0 2
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,235评论 0 52
  • 最初了解他是在一个叫做utaban的综艺节目,里面有个经典片段,那就是以下克上,我起初不太了解以下克上的定义,因为...
    我有第三只眼阅读 270评论 0 0
  • 两天的等待,听上去并不长,但经历的时候真的很煎熬。 周一一天的等待没有任何实质性的进展,感觉太浪费时间,也是深深地...
    Lotus_huimin阅读 120评论 0 0
  • 【入园前】 今天是称称的爷爷来武汉的第一天,早上我七点钟做起来,给家人做了早餐,饺子。然后给他爷爷准备好醋和辣椒酱...
    丹宁1111阅读 206评论 0 1