写出归并排序的c++代码
时间: 2023-03-12 16:13:58 浏览: 205
归并排序的c++代码
5星 · 资源好评率100%
void mergeSort(int arr[], int l, int r)
{
if (l < r)
{
int m = l+(r-l)/2;
mergeSort(arr, l, m);
mergeSort(arr, m+1, r);
merge(arr, l, m, r);
}
} void merge(int arr[], int l, int m, int r)
{
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
/* 创建临时数组 */
int L[n1], R[n2];
/* 拷贝数据到临时数组 L[] 和 R[] */
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1+ j];
/* 归并临时数组到 arr[l..r]*/
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2)
{
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
/* 拷贝 L[] 的剩余元素 */
while (i < n1)
{
arr[k] = L[i];
i++;
k++;
}
/* 拷贝 R[] 的剩余元素 */
while (j < n2)
{
arr[k] = R[j];
j++;
k++;
}
} 答:void mergeSort(int arr [],int l,int r){
如果(l <r){
int m = l +(r-l)/ 2;
mergeSort(arr,l,m);
mergeSort(arr,m + 1,r);
merge(arr,l,m,r);
}
} void merge(int arr [],int l,int m,int r){
int i,j,k;
int n1 = m - l + 1;
int n2 = r - m;
int L [n1],R [n2];
为(i = 0; i <n1; i ++)
L [i] = arr [l + i];
为(j = 0; j <n2; j ++)
R [j] = arr [m + 1+ j];
i = 0;
j = 0;
k = l;
当(i <n1 && j <n2){
如果(L [i] <= R [j]){
arr [k] = L [i];
i ++;
}
else {
arr [k] = R [j];
j ++;
}
k ++;
}
当(i <n1){
arr [k] = L [i];
i ++;
k ++;
}
当(j <n2){
arr [k] = R [j];
j ++;
k ++;
}
}
阅读全文