程式設計師面試題精選 歸併排序

2021-06-16 07:40:07 字數 702 閱讀 1880

採用分治策略

一般有三個步驟:

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...