歸併排序是乙個對資料比較大的一種比較快的演算法,採用的是分治演算法。
1、先將資料分開排序,然後再將資料合併起來。
採用一分二,二分四,四分八…的操作
2、合併排序好的序列
方法:兩個序列中的數相互比較,將較小的數先插入新的序列中。
合併方法的實現函式:
void merge(int array, int left, int mid, int right, int *extra)
else
extra_index++;
} while (left_index < mid)
while (right_index < right)
for (int i = 0; i < size; i++)
}
全部實現**如下:
// 時間複雜度
// 最好 | 平均 | 最壞 o(n * log(n))
// 空間複雜度 o(n)
// 穩定性: 穩定
// 外部排序(可以對硬碟的資料進行歸併)
// 合併兩個有序陣列
// array[left, mid)
// array[mid, right)
// 時間複雜度 o(n)
// 空間複雜度 o(n)
#include#include#include#includevoid merge(int array, int left, int mid, int right, int *extra)
else
extra_index++;
} while (left_index < mid)
while (right_index < right)
for (int i = 0; i < size; i++)
}// 區間是 array[left, right)
// 左閉右開的區間
void __mergesort(int array, int left, int right, int *extra)
if (left >= right)
int mid = left + (right - left) / 2;
// 區間被分成左右兩個小區間
// [left, mid)
// [mid, right)
// 先把左右兩個小區間進行排序,分治演算法,遞迴解決
__mergesort(array, left, mid, extra);
__mergesort(array, mid, right, extra);
// 左右兩個小區間已經有序了
// 合併兩個有序陣列
merge(array, left, mid, right, extra);
}void mergesort(int array, int size)
int main();
int sz = sizeof(array) / sizeof(array[0]);
mergesort(array, sz);
for (int i = 0; i < sz; i++)
printf("\n");
system("pause");
return 0;
}
展現結果如下:
C 資料結構 歸併排序
1 基本思想 自上而下 將兩個的有序數列合併成乙個有序數列,我們稱之為 歸併 歸併排序 merge sort 就是利用歸併思想對數列進行排序。2 工作過程 自上而下 對照下圖 a 如圖所示的陣列進入mergesortup2down1函式,此時start 0,mid 3,end 7。由於使用了遞迴,因...
資料結構 歸併排序
排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...
資料結構 歸併排序
歸併排序,即merge sort,通過遞迴式的merge操作 merge即歸併 實現排序。演算法思想是分治思想 divide and conquer 歸併排序一般是遞迴實現的 時間複雜度o nlgn 遞迴都是一去一回,去的時候divide,回的時候conquer。表達欠提煉 1 divide,分 遞...