- 题解
归并排序
- @ 2025-10-2 11:11:07
参考代码
#include <bits/stdc++.h>
using namespace std;
int arr[10] = {0,6,6,7,4,5,8,9,2};
int brr[10]; //胡杨空壳
//并
void Merge(int left,int mid ,int right) {
int i=left,j=mid+1,k=left;//k 是合并的开始位置
while(i<=mid && j<=right) { //两边都有元素的时候
//比较左右区间中,小的放到 胡杨空壳
if(arr[i]<=arr[j]) brr[k++] = arr[i++];
else brr[k++] = arr[j++];
}
//只剩左边?
while(i<=mid) brr[k++] = arr[i++];
//只剩右边?
while(j<=right) brr[k++] = arr[j++];
for(int i=left;i<=right;i++){
arr[i] = brr[j];
}
}
void Merge_sort(int left,int right) {
//出口
if(left==right) return;
//计算中间下标
int mid = (right - left)/2;
//对左区间分割
Merge_sort(left,mid);
//对右区间分割
Merge_sort(mid+1,right);
Merge(left,mid,right);
}
int main() {
//归并排序
for(int i=1;i<=8;i++) cout << arr[i] << ' ';
Merge_sort(1,8);
cout << endl;
for(int i=1;i<=8;i++) cout << arr[i] << ' ';
return 0;
}
0 条评论
目前还没有评论...