5 条题解

  • 4
    @ 2023-4-22 11:57:28

    新思路:

    归并排序

    代码:

    # include <bits/stdc++.h>
    using namespace std;
    const int N = 1e5 + 10;
    int a[N], b[N];
    void merge(int l, int mid, int r) {
    	int i = l;
    	int j = mid + 1;
    	int index = l;
    	while (i <= mid && j <= r) {
    		if (a[i] <= a[j]) {
    			b[index] = a[j];
    			index++;
    			j++;
    		} else {
    			b[index] = a[i];
    			index++;
    			i++;
    		}
    	}
    	while (i <= mid) {
    		b[index] = a[i];
    		index++;
    		i++;
    	}
    	while (j <= r) {
    		b[index] = a[j];
    		index++;
    		j++;
    	}
    	for (int i = l; i <= r; i++) {
    		a[i] = b[i];
    	}
    }
    void mergeSort(int l, int r) {
    	if (l == r) {
    		return;
    	}
    	int mid = (l + r) / 2;
    	mergeSort(l, mid);
    	mergeSort(mid + 1, r);
    	merge(l, mid, r);
    }
    int main() {
    	int n;
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++) {
    		scanf("%d", &a[i]);
    	}
    	mergeSort(1, n);
    	for (int i = n; i >= 1; i--) {
    		printf("%d ", a[i]);
    	}
    	return 0;
    }
    
    • 3
      @ 2023-8-21 16:42:10

      直接sort即可

      #include<bits/stdc++.h>
      using namespace std;
      int n;
      int a[1000010];
      int main(){
          cin>>n;
          for(int i=1;i<=n;i++){
              cin>>a[i];
          }
          sort(a+1,a+n+1);
          for(int i=1;i<=n;i++){
              cout<<a[i]<<" ";
          }
          return 0;
      }
      
      • 1
        @ 2024-2-17 19:28:54

        快排超时,归并可以用

        #include<iostream>
        
        using namespace std;
        
        const int N=1e5+10;
        int q[N],tmp[N],n;
        
        void merge(int l,int r){
            if(l>=r) return ;
            int mid=l+r>>1;
            merge(l,mid); merge(mid+1,r);
            int k=0,i=l,j=mid+1;
            while(i<=mid&&j<=r){
                if(q[i]<=q[j]) tmp[k++]=q[i++];
                else tmp[k++]=q[j++];
            }
            while(i<=mid) tmp[k++]=q[i++];
            while(j<=r) tmp[k++]=q[j++];
        
            for(i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];
        }
        
        int main(){
            cin>>n;
            for(int i=0;i<n;i++) cin>>q[i];
            merge(0,n-1);
            for(int i=0;i<n;i++) cout<<q[i]<<' ';
            return 0;
        }
        
        • 0
          @ 2022-7-3 22:55:03

          经典板子题

          #include<iostream>
          #include<algorithm>
          using namespace std;
          int a[100005],n;
          int main(){
          	cin>>n;
          	for(int i=0;i<=n-1;i++){
          		cin>>a[i];
          	}
          	sort(a,a+n);
          	for(int i=0;i<=n-1;i++){
          		cout<<a[i]<<" ";
          	}
          	return 0;
          }
          

          https://www.luogu.com.cn/record/78361639

          • -4
            @ 2021-10-4 9:30:44

            #include <iostream> #include <algorithm> using namespace std; int main() { int n; cin >>n; int a[n]; for(int i=1;i<=n;i++) { cin >>a[i]; } sort(a+1,a+1+n); for(int i=1;i<=n;i++) { cout <<a[i]<<" "; } }

            • 1

            信息

            ID
            178
            时间
            1000ms
            内存
            256MiB
            难度
            2
            标签
            递交数
            250
            已通过
            74
            上传者