資料結構 歸併排序(C語言)

2021-09-12 14:52:07 字數 1882 閱讀 7721

歸併排序是乙個對資料比較大的一種比較快的演算法,採用的是分治演算法。

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,分 遞...