用歸併排序法對一組資料由小到大進行排序,資料分別為 695、458、362、789、12、 15、163、23、2、986。
(1) 自定義函式 merge(),實現一次歸併排序。
(2) 自定義函式 merge_sort(),實現歸併排序。
#include int merge(int r,int s,int x1,int x2,int x3) //自定義實現一次歸併樣序的函式
else
while(i<=x2) //
將x1〜x2範圍內未比較的數順次加到陣列r中
s[k++]=r[i++];
while(j<=x3) //
將x2+l〜x3範圍內未比較的數順次加到陣列r中
s[k++]=r[j++];
return0;
}int merge_sort(int r,int s,int m,int
n)
return0;
}int
main()
請輸入10個數:歸併是將兩個或多個存序記錄序列合併成乙個有序序列。695 458 362 789 12 15 163 23 2 986
排序後的順序是:
2 12 15 23 163 362 458 695 789 986
歸併方法有多種,一次對兩個有序記錄序列進行歸併,稱為路歸併排序,也有三路歸併排序及多路歸併排序。本例項是二路歸併排序,基本方法如下:
(1) 將 n 個記錄看成是 n 個長度為 1 的有序子表。
(2) 將兩兩相鄰時有序無表進行歸併。
(3) 重複執行步驟 (2) 直到歸併成乙個長度為 n 的有序表。
不管你是轉行也好,初學也罷,高階也可,如果你想學程式設計,高階程式設計師~
【值得關注】我的程式設計學習交流俱樂部!【點選進入】
歸併排序 C語言
今天寫的是歸併排序,歸併排序的定義為 依次將每兩個相鄰的有序表合併成乙個有序表的排序方法。最經常使用的歸併方法是2 路歸併。假設初始序列含有n個記錄,則可看成是n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到 n 2 個長度為2或1的有序子串行 再兩兩歸併,如此重複,直至得到乙個長度為n的...
自然歸併排序演算法(C語言)
例 a 自然歸併排序指的是對陣列先進行一次線性掃瞄,得到自然排好序的子數段,在對其進行兩兩合併成更大的排好序的陣列。include define n 8 int getindex int a n int index n index j n 後面mergesort中合併需要判斷i的範圍,否則index...
C語言排序演算法之歸併排序
排序演算法中的歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low m r m 1 high 先將它們合併到乙個區域性的暫存向量r1 相當於輸出堆 中,待合併完成後將...