const int maxn = 100;
//将数组A的[L1,R1]与[L2,R2]区间合并为有序区间(此处L2即为R1+1)
//归并排序的递归实现
void merge(int A[], int L1, int R1, int L2, int R2)
{
int i = L1, j = L2;
int temp[maxn], index = 0;//临时存放合并后的数组,index为其下标
while (i <= R1&&j <= R2) {
if (A[i] < A[j]) {
temp[index++] = A[i++];
}
else {
temp[index++] = A[j++];
}
}
while (i <= R1) {
temp[index++] = A[i++];
}
while (j <= R2) {
temp[index++]=A[j++];
}
for (i = 0; i < index; ++i) {
A[L1 + i] = temp[i];
}
}
//将array数组当前区间[left,right]进行归并排序
void mergeSort(int A[], int left, int right)
{
if (left < right) {
int mid = (left + right) / 2;
mergeSort(A, left, mid);
mergeSort(A, mid, right);
merge(A, left, mid, mid + 1, right);
}
}
归并排序的递归实现
最新推荐文章于 2024-01-23 17:28:58 发布