資料結構基礎7 4 歸併排序

2021-07-08 11:25:01 字數 1004 閱讀 3125

歸併(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 ...