全部评论 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;
    }
    

    6小时前 来自 浙江

    0

热门讨论