- 题解
归并排序
- @ 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;
}
1 条评论
-
xsm李永煊 LV 6 @ 2025-11-14 16:03:19#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; }
- 1