題目:
設子陣列a[0:k]和a[k+1:n-1]已排好序(0<=k<=n-2)。試設計乙個合併這兩個子陣列為排好序的陣列a[0:n-1]的演算法。要求演算法的在最壞情況下所用的計算時間為o(n),且只用到o(1)的輔助空間。
#include
void houyi(int a,int l,int r)
}int main ()
; int i= 0;
int n = sizeof(a)/sizeof(a[0]);
int l = 0;
int r = (n-l)/2;
while(lwhile(a[l] < a[r])
while(a[l] > a[r])
}for(i=0; iprintf("%d ",a[i]);
}printf("\n");
return
0;}
即將前半部分排好序的子陣列以及後半部分排好序的子陣列合併成乙個排好序的陣列。 C語言之合併排序
一 基本運算 兩路合併排序 將兩個有序序列合併成乙個有序序列。二 步驟 把待排序的序列分成長度為1的子串行 只包含乙個記錄的序列被認為是有序的 得到n個長度為1的有序子串行 實施兩兩合併,合併相鄰的兩個子串行 得到大約n 2個長度為2的有序子串行 重複步驟 直到合併成乙個長度為n的有序序列為止。三 ...
分治 合併排序 自然合併排序(C )
演算法步驟 引用自 菜鳥教程 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列 設定兩個指標,最初位置分別為兩個已經排序序列的起始位置 比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置 重複步驟 3 直到某一指標達到序列尾 將另一串行剩下的所有元素直...
合併排序(C語言實現
遞迴演算法是把乙個問題分解成和自身相似的子問題,然後再呼叫自身把相應的子問題解決掉。這些演算法用到了分治思想。其基本模式如下 分解 把乙個問題分解成與原問題相似的子問題 解決 遞迴的解各個子問題 合併 合併子問題的結果得到了原問題的解。現在就用遞迴演算法,採用上面的分治思想來解合併排序。合併排序 非...