drd
2024-12-21 19:10:41
发布于:浙江
/*
归并排序:
1:将等待排序序列分成若干个子序列;
2:将子排序 合并为一个 有序序列
*/
//第一个数输入一个n(1<=n<=1000),随后输入n个数。
//入n个数从小到大排序后的数据
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1010],b[1010];
void MergeSort(int l,int r){//l=开始下标,r=结束下标
//分
if(l==r) return;
int mid = (l+r)/2;// 取中间值 l+r > 1也行
MergeSort(l,mid);//递归分左半部分
MergeSort(mid+1, r); //递归分右半部分
//合并
int i=l,j=mid+1;//左区间开始下标,右区间开始下标
while(i<=mid && j<=r){
if(a[i] <= a[j]){
b[cnt++] == a[i++];
}
else{
b[cnt++] == a[j++];
}
}
while(i<=mid) b[cnt++] == a[i++];//处理左半部分
while(j<=r) b[cnt++] == a[j++];//处理右半部分
for(int k=1;k<=r;k++) {
a[k] =b[k] //数据迭代
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]
}
//调用归并排序函数 MergeSort(开始排序下标,结束排序下标)
MergeSort(1,n);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
全部评论 1
/* 归并排序: 1:将等待排序序列分成若干个子序列; 2:将子排序 合并为一个 有序序列 */ //第一个数输入一个n(1<=n<=1000),随后输入n个数。 //入n个数从小到大排序后的数据 #include<bits/stdc++.h> using namespace std; int n; int a[1010],b[1010]; void MergeSort(int l,int r){//l=开始下标,r=结束下标 //分 if(l==r) return; int mid = (l+r)/2;// 取中间值 l+r > 1也行 MergeSort(l,mid);//递归分左半部分 MergeSort(mid+1, r); //递归分右半部分 //合并 int i=l,j=mid+1;//左区间开始下标,右区间开始下标 while(i<=mid && j<=r){ if(a[i] <= a[j]){ b[cnt++] == a[i++]; } else{ b[cnt++] == a[j++]; } } while(i<=mid) b[cnt++] == a[i++];//处理左半部分 while(j<=r) b[cnt++] == a[j++];//处理右半部分 for(int k=1;k<=r;k++) { a[k] =b[k] //数据迭代 } } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i] } //调用归并排序函数 MergeSort(开始排序下标,结束排序下标) MergeSort(1,n); for(int i=1;i<=n;i++){ cout<<a[i]<<" "; } return 0; }
2024-12-21 来自 浙江
0
有帮助,赞一个