採用分治策略
一般有三個步驟:
1、分解:將n個元素分成各含n/2個元素的子串行
2、解決:用合併排序法對兩個子串行遞迴的排序
3、合併:合併兩個已排序的子串行以得到排序結果。
在歸併排序時,其長度為1時遞迴結束。單個元素被視為是已排序好的。
#includeusing namespace std;
#define max 0x7fffffff //最大可能值,用於哨兵
void merge(int *a, int low, int mid, int high)
{ if(a == null)return;
int n1 = mid-low+1;
int n2 = high-mid;
int *left = new int[n1+1];
int *right = new int[n2+1];
for(int i=0; i
演算法分析
(1)穩定性
歸併排序是一種穩定的排序。
(2)儲存結構
可用順序儲存結構。也易於在鍊錶上實現。
(3)時間複雜度
對長度為n的檔案,需進行
(4)空間複雜度
需要乙個輔助向量來暫存兩有序子檔案歸併的結果,故其輔助空間複雜度為o(n),顯然它不是就地排序。
程式設計師面試題精選
問題描述 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c所能排列出來的所有字串abc acb bac bca cab和cba。問題分析 這是一道很好的考查對遞迴理解的程式設計題。寫遞迴程式關鍵有兩點,處理好進入與返回的關係,進入時改變了什麼,返回時應當恢復。字...
程式設計師面試題精選100題
今天開始各種刷面試題,沉下心來集中時間,全身心投入 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。比如將二元查詢樹 10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。相關概念 二元查詢樹 它首先要是...
(程式設計師面試題)選擇排序
選擇排序是除了氣泡排序之後又一最基本的排序演算法,具體演算法小弟表達能力有限,為了不誤導大家,請自行wiki,此處僅貼出 include int main void int i,j int min,tmp,cur 0 for i 0 i 9 i tmp num i num i num min num...