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,270評論 0 2
  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,214評論 0 52
  • 最初了解他是在一個叫做utaban的綜藝節目,里面有個經典片段,那就是以下克上,我起初不太了解以下克上的定義,因為...
    我有第三只眼閱讀 259評論 0 0
  • 兩天的等待,聽上去并不長,但經歷的時候真的很煎熬。 周一一天的等待沒有任何實質性的進展,感覺太浪費時間,也是深深地...
    Lotus_huimin閱讀 115評論 0 0
  • 【入園前】 今天是稱稱的爺爺來武漢的第一天,早上我七點鐘做起來,給家人做了早餐,餃子。然后給他爺爺準備好醋和辣椒醬...
    丹寧1111閱讀 192評論 0 1