歸併排序的優點是穩定,時間複雜度與nlgn成正比,缺點是所佔空間與n成正比.
自頂向下的歸併排序
對乙個陣列進行歸併排序,可將乙個陣列分成兩個,先使得子陣列有序,然後再將兩個有序的子陣列合成乙個有序的子陣列,即將陣列的排序轉化為對兩個有序陣列的合併.對於乙個無序的陣列來說,先遞迴操作是最小的子陣列有序,然後再合併子陣列使其成為較大的陣列,直到整個陣列有序.在將兩個子陣列合併的時候,需要借助另乙個陣列來暫存這個合成的有序的陣列,然後再將值賦到原陣列的相應位置.
#include #include #include #include #include #include using namespace std;
#define ok 1
#define error -1
#define true 1
#define false 0
typedef int status;
//輸出函式
void print(int a, int l, int r)
printf("\n");
}void mergearray(int a, int l, int m, int r, int temp)
else
}while(i <= m)
while(j <= r)
///再將排好序的temp陣列放到a陣列的相應位置
for(i = l, k = 0; i <= r; i++, k++)
}void mergesort(int a, int l, int r, int temp)
int main()
; int temp[12];
//歸併排序
printf("對0~11排序\n");
mergesort(a, 0, 11, temp);
print(a, 0, 11);
return 0;
}
C C 實現歸併排序
將乙個陣列的左半部分先排好序,然後再將右半部分排好序 然後通過外排的方式將左右兩個部分整體排好序 外排,即額外使用乙個輔助陣列,使整體有序 堆排序氣泡排序 選擇排序 插入排序 隨機快速排序 一維隨機數組生成器 歸併排序 實現外排 template class t void merge t arr,i...
C C 歸併排序的實現
按照自己的想法實現的歸併排序,應該沒什麼問題 歸併排序定義什麼的我就不寫了,直接看 吧 普通陣列寫法 include include using namespace std void merge int a,int left,int right idx for int i left i right ...
歸併排序 C C (簡單理解)
此文一方面為主觀理解歸併排序,若有地方不妥,還請見諒。歸併排序是建立在歸併操作上的一種有效,穩定的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個...