7 49 插入排序還是歸併排序 (25 分)

2021-09-07 05:00:24 字數 1192 閱讀 2759

根據維基百科的定義:

插入排序是迭代演算法,逐一獲得輸入資料,逐步產生有序的輸出序列。每步迭代中,演算法從輸入序列中取出一元素,將之插入有序序列中正確的位置。如此迭代直到全部元素有序。

歸併排序進行如下迭代操作:首先將原始序列看成 n 個只包含 1 個元素的有序子串行,然後每次迭代歸併兩個相鄰的有序子串行,直到最後只剩下 1 個有序的序列。

現給定原始序列和由某排序演算法產生的中間序列,請你判斷該演算法究竟是哪種排序演算法?

輸入在第一行給出正整數 n (≤100);隨後一行給出原始序列的 n 個整數;最後一行給出由某排序演算法產生的中間序列。這裡假設排序的目標序列是公升序。數字間以空格分隔。

首先在第 1 行中輸出insertion sort表示插入排序、或merge sort表示歸併排序;然後在第 2 行中輸出用該排序演算法再迭代一輪的結果序列。題目保證每組測試的結果是唯一的。數字間以空格分隔,且行首尾不得有多餘空格。

10

3 1 2 8 7 5 9 4 6 0

1 2 3 7 8 5 9 4 6 0

insertion sort

1 2 3 5 7 8 9 4 6 0

10

3 1 2 8 7 5 9 4 0 6

1 3 2 8 5 7 4 9 0 6

merge sort

1 2 3 8 4 5 7 9 0 6

明白排序原理後,借sort實現;對比陣列用函式「equal」; 確認排序方法後仍需排一輪再輸出(先排序後判斷是否flag更新,然後檢查flag==1跳出);

for(int i=2;i<=n;i++)          //插入排序關鍵**

sort(a,a+i);

for(int i=2; i*=2)

}int main()

for(int i=0;iscanf("%d",&b[i]);

insertion_sort(a1,b);

merge_sort(a2,b);

return 0;

}

案例7 1 2 插入排序還是歸併排序

題目位址 思路 1.要區分插入排序和歸併排序,我們需要知道的是經過插入排序的前後兩個陣列的是有一段相同字尾的 除非你插入的是右邊最後乙個元素且改變了原位置,此時左邊都有序了,這種情況造成的前後改變歸併排序也可以做到 且前面是已經排好了序的.故我們從前面開始檢查排序後的陣列它的最長有序長度,並將第乙個...

插入排序 歸併排序

插入排序 define len 5 int a len void insertion sort void int i,j,k for j 1 j len j k a j i j 1 while i 0 a i k a i 1 a i i a i 1 k 歸併排序 int a 8 void merge...

插入排序 歸併排序

演算法導論初涉,第一講練習內容 include define n 6 int a n void init 初始化陣列 a i 1 k void output int a,int n void merge int low,int mid,int high while s mid b i a s whi...