PatB1035/PatA1089 插入與歸并 2020/8/18

問題描述

根據(jù)維基百科的定義:
插入排序是迭代算法逛艰,逐一獲得輸入數(shù)據(jù)造成,逐步產(chǎn)生有序的輸出序列。每步迭代中榕莺,算法從輸入序列中取出一元素俐芯,將之插入有序序列中正確的位置。如此迭代直到全部元素有序钉鸯。

歸并排序進(jìn)行如下迭代操作:首先將原始序列看成 N 個只包含 1 個元素的有序子序列吧史,然后每次迭代歸并兩個相鄰的有序子序列,直到最后只剩下 1 個有序的序列唠雕。

現(xiàn)給定原始序列和由某排序算法產(chǎn)生的中間序列贸营,請你判斷該算法究竟是哪種排序算法?
輸入格式:
輸入在第一行給出正整數(shù) N (≤100)岩睁;隨后一行給出原始序列的 N 個整數(shù)钞脂;最后一行給出由某排序算法產(chǎn)生的中間序列。這里假設(shè)排序的目標(biāo)序列是升序捕儒。數(shù)字間以空格分隔冰啃。

輸出格式:
首先在第 1 行中輸出Insertion Sort表示插入排序、或Merge Sort表示歸并排序刘莹;然后在第 2 行中輸出用該排序算法再迭代一輪的結(jié)果序列阎毅。題目保證每組測試的結(jié)果是唯一的。數(shù)字間以空格分隔点弯,且行首尾不得有多余空格扇调。

解決方法

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 105;
//a用來做插入 b用來做結(jié)果的對比 c用來做歸并
int a[maxn], b[maxn], c[maxn];
bool cmp(int a[], int b[], int n);
//二路歸并
void mergeSort(int A[], int n)
{
  /*
    flag用于在選擇相同的序列后在進(jìn)行一次歸并排序
    因為題目一定有結(jié)果不是插入一定是歸并所以不用返回值
  */
  int flag = 1;
  for (int step = 2; step / 2 < n; step *= 2)
  {
    for (int i = 0; i < n; i += step)
    {
      int mid = i + step / 2 - 1;
      if (mid + 1 < n)
      {
        //直接使用sort來代替?zhèn)鹘y(tǒng)的merge函數(shù)
        sort(A + i, A + min(i + step - 1, n - 1) + 1);
      }
    }
    if (flag == 0)
      return;
    if (cmp(c, b, n))
      flag--;
  }
}
bool insertSort(int A[], int n)
{
  int j = 0;
  /*
    flag用于在選擇相同的序列后在進(jìn)行一次插入排序
  */
  int flag = 1;
  for (int i = 1; i < n; i++)
  {
    int temp = A[i];
    j = i;
    while (j > 0 && temp < A[j - 1])
    {
      A[j] = A[j - 1];
      j--;
    }
    A[j] = temp;
    if (flag == 0)
      return true;
    if (cmp(a, b, n))
    {
      flag--;
    }
  }
  return false;
}
/*
  比較兩個數(shù)組是否相同
*/
bool cmp(int a[], int b[], int n)
{
  for (int i = 0; i < n; i++)
  {
    if (a[i] != b[i])
      return false;
  }
  return true;
}
/*
  輸出數(shù)組的元素
*/
void printArr(int a[], int n)
{
  for (int i = 0; i < n; i++)
  {
    printf("%d", a[i]);
    if (i != n - 1)
      printf(" ");
  }
}
int main(void)
{
  //獲取輸入
  int m = 0;
  scanf("%d", &m);
  for (int i = 0; i < m; i++)
  {
    scanf("%d", a + i);
    c[i] = a[i];
  }
  for (int i = 0; i < m; i++)
  {
    scanf("%d", b + i);
  }

  //先看看是否是插入排序是就不用去執(zhí)行歸并了
  bool res1 = insertSort(a, m);
  if (res1)
  {
    printf("Insertion Sort\n");
    printArr(a, m);
  }
  else
  {
    //執(zhí)行歸并
    printf("Merge Sort\n");
    mergeSort(c, m);
    printArr(c, m);
  }
  return 0;
}

基本策略

  • 寫出插入排序和歸并排序的非遞歸方法來記錄每一次歸并或者插入的序列做對比

結(jié)果展示

PatB1035.png

日期問題

  • 因為把注釋版的提交了一遍所以顯示的是8/19
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抢肛,隨后出現(xiàn)的幾起案子狼钮,更是在濱河造成了極大的恐慌,老刑警劉巖捡絮,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燃领,死亡現(xiàn)場離奇詭異,居然都是意外死亡锦援,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門剥悟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灵寺,“玉大人曼库,你說我怎么就攤上這事÷园澹” “怎么了毁枯?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叮称。 經(jīng)常有香客問我种玛,道長,這世上最難降的妖魔是什么瓤檐? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任赂韵,我火速辦了婚禮,結(jié)果婚禮上挠蛉,老公的妹妹穿的比我還像新娘祭示。我一直安慰自己,他們只是感情好谴古,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布质涛。 她就那樣靜靜地躺著,像睡著了一般掰担。 火紅的嫁衣襯著肌膚如雪汇陆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天带饱,我揣著相機(jī)與錄音毡代,去河邊找鬼。 笑死纠炮,一個胖子當(dāng)著我的面吹牛月趟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恢口,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼孝宗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耕肩?” 一聲冷哼從身側(cè)響起因妇,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猿诸,沒想到半個月后婚被,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡梳虽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年址芯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谷炸,死狀恐怖北专,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旬陡,我是刑警寧澤拓颓,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站描孟,受9級特大地震影響驶睦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匿醒,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一场航、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧青抛,春花似錦旗闽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至举瑰,卻和暖如春捣辆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背此迅。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工汽畴, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耸序。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓忍些,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坎怪。 傳聞我的和親對象是個殘疾皇子罢坝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354