歸併排序 c c

2021-08-24 17:30:10 字數 965 閱讀 6509

歸併排序的優點是穩定,時間複雜度與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 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個...