歸併(merge)排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,
每個子串行是有序的,然後再把有序子串行合併為整體
有序序列。
遞迴過程是將待排序集合一分為二,直至排序集合就剩下乙個元素為止,然後不斷的合併兩個排好序的陣列。
#include #include #include using namespace std;
/* 將兩個有序陣列歸併到成乙個有序陣列 */
void merge(int a, int tmp, int start, int mid, int end)
while(pleft <= mid)
tmp[ptmp++] = a[pleft++];
while(pright <= end)
tmp[ptmp++] = a[pright++];
for(int i = start; i <= end; i++)
a[i] = tmp[i];
}/* 遞迴歸併 */
void msort(int a, int tmp, int start, int end)
}/* 歸併排序介面 */
void merge_sort(int a, int n)
int main()
; for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
printf("%d ", a[i]);
printf("\n");
merge_sort(a, sizeof(a) / sizeof(a[0]));
for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
printf("%d ", a[i]);
printf("\n");
system("pause");
return 0;
}
1.合併兩個有序陣列。
資料結構基礎 5 歸併排序
歸併排序的基本思想 將兩個或兩個以上的有序子串行 歸併 為乙個有序序列 假定待排序表含有n個記錄,則可以看成是n個有序的子表,每個子表長度為1,然後兩兩歸併,得到 n 2 個長度為2或1的有序表,再量量歸併,如此重複,直到合併成為乙個長度為n的有序表為止,這種排序方法稱為2 路歸併排序.如圖為乙個2...
資料結構基礎 5 歸併排序
歸併排序的基本思想 將兩個或兩個以上的有序子串行 歸併 為乙個有序序列 假定待排序表含有n個記錄,則可以看成是n個有序的子表,每個子表長度為1,然後兩兩歸併,得到 n 2 個長度為2或1的有序表,再量量歸併,如此重複,直到合併成為乙個長度為n的有序表為止,這種排序方法稱為2 路歸併排序.如圖為乙個2...
資料結構 歸併排序
排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...