1 条题解
-
0
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
- 上传者