題目描述
這是乙個很簡單的排序題目. 為了鍛鍊大家對不同演算法的了解,請大家用歸併排序法對此題進行解答. 對一組整數數列a[1],a[2],a[3]......a[n]進行排序,按照從小到大的順序輸出.
輸入
本題只有一組測試資料,在輸入的第一行輸入n(表示整數數列的大小)(n < 1000)輸出接下來n行輸入n個整數,每一行乙個整數.
對已經排好序的數從小到大依次輸出,每兩個數之間用兩個空格隔開,且每輸出10個數換行.樣例輸入複製
1245545
4847
4445
4857
5857
4851255
42
樣例輸出複製
42 44 45 45 47 48 57 58 485 5451255 4857
#include#includeusing
namespace
std;
intn;
void merge(int a,int temp,int start,int mid,int
end)
while(i!=mid+1
) temp[k++]=a[i++];
while(j!=end+1
) temp[k++]=a[j++];
for(i=start; i<=end; i++)
a[i] =temp[i];
}void mergesort(int a,int temp,int start,int
end)
}int
main()
}return0;
}
演算法分析 合併排序演算法
1.設定三個指標i,j,k 其中i和j指示兩個待排序序列中當前需比較的元素,k指向輔助陣列b中待放置元素的位置。2.比較a i 和a j 的大小關係,小的取出來,如果a i 小於等於a j 則b k a i 同時將指標i和k分別推進一步 反之,b k a j 同時將指標j和k分別推進一步 如此反覆,...
演算法之合併排序
合併排序演算法是用分治策略實現對n個元素進行排序的演算法。基本思想 將待排序元素分成大小大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排好序的子集合合併成要求的排好序的集合。歸併操作的工作原理如下 第一步 申請空間,使其大小為兩個已經 排序序列之和,該空間用來存放合併後的序列 第二步 設定兩...
演算法之合併排序
分治法,將原問題劃分成n個規模較小而結構與原問題相似的子問題 遞迴地解決這些子問題,然後再合併其結果,就能得到原問題的解。在每一層遞迴上都會有三個步驟 分解 將原問題分解成一系列子問題 解決 遞迴地解決各子問題,若子問題足夠小,則直接求解 合併 將子問題的結果合併成原問題的解。合併排序演算法完全依照...