#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非遞...