這個排序比起冒泡,選擇什麼的就快很多了,時間複雜度是n*logn,但是實現起來也很複雜。
原理是:第一步,合併1、2|3、4| 5、6....(相鄰兩個排序)
第二步,合併1、2、3、4|5、6、7、8|9...(相鄰四個排序)..
.實現起來最主要的是合併的函式,廢話不多說,看**:
class mergersorter
private void domergesort(ref int numbers, int start,int end)
}//part2_start=part1_end+1,即合併兩部分的是相連的,且各自部分是已排序的。
private void merge(ref int numbers, int part1_start, int part1_end,int part2_end)
else
postemp++;
}//第一段沒比較完
if (pos1 <= part1_end)
}//第二段沒比較完
if (pos2 <= part2_end)
}//寫回
for (int i = 0; i < postemp; i++)
}}
排序演算法 合併排序
說明 之前所介紹的排序法都是在同乙個陣列中的排序,考慮今日有兩筆或兩筆以上的資料,它可能是不同陣列中的資料,或是不同檔案中的資料,如何為它們進行排序?解法 可以使用合併排序法,合併排序法基本是將兩筆已排序的資料合併並進行排序,如果所讀入的資料尚未排序,可以先利用其它的排序方式來處理這兩筆資料,然後再...
合併排序演算法
陣列ary的m個元素,ary p ary q ary q 1 ary r 已按曾序排序 使得ary p ary r 按曾序排列 void clibrary merge int ary,int p,int q,int r,int m else k 0 for i p i r i ary i bp k ...
合併排序演算法
主要思想 不斷將已經有序的子陣列a p.q 和a q 1.r 合併為新的有序的陣列a p.r 具體過程可如下操作 分解 將n個元素分成各含n 2個元素的子串行 解決 對兩個子陣列遞迴地排序 合併 合併兩個已經有序的子陣列得到最終的有序陣列。合併 歸併排序 分治策略 include include u...