陣列歸併排序

2021-10-08 19:18:39 字數 1057 閱讀 1048

#include

#include

using

namespace std;

void

print

(int a)

/*歸併排序

思路:1、歸併排序:條件(小下標小,大下標大); 分別對左半段和右半段進行歸併排序,然後合併

2、合併:把當前待排序列複製乙份(原來的陣列放排好序的元素); 分兩段,依次比較左半段和右半段的元素,取小的放到原來的陣列,最後把剩下的元素放到原來的陣列

*/int

*b =

(int*)

malloc((

5+1)

*sizeof

(int))

;//5是總的序列長度;最好定義成全域性變數,因為不確定序列在複製陣列的時候b足夠大(和a一樣大),就可以直接按照相同的下標進行複製操作,可以減少出錯的概率

void

merge

(int a,

int low,

int mid,

int high)

i = k = low;

j = mid+1;

while

(i<=mid && j<=high)

while

(i<=mid) a[k++

]= b[i++];

//若第乙個表沒檢測完,複製

while

(j<=high) a[k++

]= b[j++];

//若第二個表沒檢測完,複製

}void

mergesort

(int a,

int low,

int high)

}int

main()

for(i=

0; i<

5; i++

) a[i]=5

-i;print

(a);

mergesort

(a,0,4

);print

(a);

return0;

}

陣列的歸併排序

歸併排序 利用遞迴與分治的思想,先將陣列對半劃分,再對半劃分的陣列排序,從而使左右兩個子陣列各自有序,最後再將兩排序號的子陣列進行歸併成乙個大的有序陣列。具體 如下 include include using namespace std void mergesort vector arr,int s...

筆記 C 陣列排序(歸併排序)

歸併排序也稱合併排序,其演算法思想是將待排序序列分為兩部分,依次對分得的兩個部分再次使用歸併排序,之後再對其進行合併。僅從演算法思想上了解歸併排序會覺得很抽象,接下來就以對序列a 0 a l a n 1 進行公升序排列來進行講解,在此採用自頂向下的實現方法,操作步驟如下。1 將所要進行的排序序列分為...

歸併排序(2 路歸併排序)

遞迴寫法 include define maxn 100 void merge int a,int l1,int r1,int l2,int r2 將陣列a的區間 l1,r1 和區間 l2,r2 合併為乙個有序區間 else while i r1 while j r2 for int i 0 i非遞...