1 条题解

  • 0
    @ 2025-9-10 0:09:06

    C++ :

    #include<iostream>
    using namespace std;
    int a[10100];
    int main()
    {
        int n;
        int i,j;
        int temp,sum=0;
     
        cin>>n;
        for(i=1;i<=n;i++)
            cin>>a[i];
        for(i=1;i<=n;i++)
            for(j=i+1;j<=n;j++)
                if(a[i]>a[j])
                {
                    temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                    sum++;
                }
        cout<<sum<<endl;
        return 0;
    }
    

    Pascal :

    var a,r:array[1..100000] of longint;
        i,j,n,k,sum:longint;
    procedure mergesort(st,ed:longint);
    var mid:longint;
    begin
      if st=ed then exit;
      mid:=(st+ed) div 2;
      mergesort(st,mid);
      mergesort(mid+1,ed);
      i:=st; j:=mid+1; k:=st;
      while (i<=mid) and (j<=ed) do
      begin
        if a[i]<=a[j] then begin r[k]:=a[i]; inc(i); inc(k); end
          else begin sum:=sum+mid+1-i; r[k]:=a[j]; inc(j); inc(k); end;
      end;
      while i<=mid do begin r[k]:=a[i]; inc(i); inc(k); end;
      while j<=ed do begin r[k]:=a[j]; inc(j); inc(k); end;
      for i:=st to ed do a[i]:=r[i];
    end;
    begin
      readln(n);
      for i:=1 to n do
        read(a[i]);
      mergesort(1,n);
      writeln(sum);
    end.
    

    Java :

    import java.util.Scanner;
    
    public class Main {
    	public static long count = 0;
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		int n = input.nextInt();
    		int[] array = new int[n];
    		for (int i = 0; i < n; i++) {
    			array[i] = input.nextInt();
    		}
    		mergesort(array, 0, n - 1);
    		System.out.println(count);
    	}
    
    	private static void mergesort(int[] array, int start, int end) {
    		if (start >= end)
    			return;
    		int mid = start + (end - start) / 2;
    		mergesort(array,start,mid);
    		mergesort(array,mid+1,end);
    		merge(array,start,mid,end);
    	}
    
    	private static void merge(int[] array, int start, int mid, int end) {
    		int[] num = new int[end-start+1];
    		int p = start;
    		int q = mid+1; 
    		int index = 0;
    		while(p<=mid&&q<=end) {
    			if(array[p]>array[q]) {
    				count += mid-p+1;
    				num[index++] = array[q++];
    			}else {
    				num[index++] = array[p++];				
    			}
    		}
    		while(p<=mid) {
    			num[index++] = array[p++];
    		}
    		while(q<=end) {
    			num[index++] = array[q++];
    		}
    		System.arraycopy(num, 0, array, start, end-start+1);
     	}
    }
    
    
    • 1

    信息

    ID
    2803
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者