A continuacion el fichero de inversiones de uno y el codigo
Código:
package default_package;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
/**
* The Class Inversiones.
* Clase que calcula el número de inversiones que hay en un array para ordenarlo
*
* @author Pitagoras
* @version 20.03.2022
*/
public class Inversiones {
/**
* The main method.
*
* @param args the arguments
* @throws IOException Signals that an I/O exception has occurred.
*/
public static void main(String[] args) throws IOException {
Scanner leer = new Scanner(new File("C:\\Ruta\\InversionsTest.dat"));
int nCases = leer.nextInt();
double a[] = new double[nCases];
for(int i=0; i<nCases; i++) {
a[i]= leer.nextInt();
}
System.out.println("El número de inversiones que tiene el array dado es: " +ordenar(a, 0, a.length-1));
}
/**
* Merge. Método valido para ordenar el array.
*
* @param a2 array que queremos ordenar
* @param a numero de la izquierda
* @param middle la mitad entre el límite inferior y superior
* @param b numero de la derecha
* @return el número de inversiones que hay durante el recorrido del método
*/
private static int merge (double[] a2, int a, int middle, int b) {
int cont=0;
int i=0, j=0, k=a;
double[] left = Arrays.copyOfRange(a2, a, middle+1);
double [] right = Arrays.copyOfRange(a2, middle+1, b+1);
while(i<left.length && j<right.length) {
if(left[i] <= right[j]) {
a2[k++]=left[i++];
}else {
a2[k++]=right[j++];
cont += (middle+1)-(a+i);
}
}
while(i<left.length) {
a2[k++] = left[i++];
}
while (j < right.length) {
a2[k++] = right[j++];
}
return cont;
}
/**
* Método para ordenar el array, recursivo. Parecido a MergeSort.
*
* @param a2 array a ordenar
* @param min, limite inferior del array que queremos ordenar - referido a posiciones dentro del array
* @param max, limite superior del array que queremos ordenar - referido a posiciones dentro del array
* @return numero de inversiones necesarias para ordenar el array
*/
private static int ordenar(double[] a2, int min, int max) {
int cont=0;
int middle = (min+max)/2;
if(min<max) {
cont = ordenar (a2, min, middle);
cont = cont + ordenar (a2, middle + 1, max);
cont = cont + merge (a2, min, middle, max);
}
return cont;
}
}
ES LO UNICO QUE ME FALTA PARA TERMINARLO, PORFAVOR SI ALGUIEN ME PUDIESE AYUDAR
.txt de las inversiones de uno:
- 1000
54044
14108
79294
29649
25260
60660
2995
53777
49689
9083
16122
90436
4615
40660
25675
58943
92904
9900
95588
46120
29390
91323
85363
45738
80717
57415
7637
8540
6336
45434
65895
61811
8959
9139
31027
87662
2484
65550
23260
15616
3490
49568
5979
44737
52808
72122
37957
34826
21419
73531
94323
52910
84496
71799
50162
1692
1565
59279
56864
20141
13893
63942
6055
33424
44771
25678
33639
27793
41268
1857
63388
32976
46195
61291
61740
61680
45264
76361
49243
73250
67432
29124
15198
30626
18950
13857
32569
45179
47696
21283
77169
26357
97885
54741
57246
61929
25997
45859
3353
32204
97451
60550
49516
38558
57674
36443
666
32486
54910
24666
45119
40779
3441
83779
60645
63003
59616
7364
69058
41651
12201
13234
19717
11536
70350
15611
74484
96153
4127
60035
19418
58613
28590
32917
97780
17644
15836
88046
26489
38410
54618
16967
81604
60064
5833
80689
43137
57274
8002
4445
42933
75378
15130
10689
98579
42780
38379
76394
66337
15126
59535
53639
43182
88220
5506
21939
26719
32919
78383
62297
30677
15301
35277
2240
37292
11269
92554
12813
63131
25964
15618
11318
72799
43976
4698
32984
5
56322
30793
46586
36082
25956
61243
44613
59907
13187
43815
52408
63547
86233
7901
50572
29212
10912
54449
373
69509
3580
31479
66601
35427
49309
50428
76859
19840
95749
76993
45747
67663
85229
26778
72164
73627
31869
22208
17759
29409
20625
27533
3911
28506
13185
72229
2975
96029
66725
67778
77399
90300
16005
39433
33342
98536
66330
41629
79932
64508
80437
58093
7690
34357
87977
78134
6271
72856
43004
81631
4654
94363
37138
62061
18913
42432
11926
9778
23507
52921
12302
61620
89415
52561
8564
80333
62937
17680
49024
37850
54127
92136
65865
19416
86651
81030
12473
37840
36215
88329
23844
38832
1807
1726
84720
10551
12770
33510
23806
6831
41122
36046
2410
11380
8861
18964
37605
2021
59504
57029
64121
85107
64293
64821
72694
32390
55767
3884
74771
393
21050
70556
39830
42172
5615
47643
48677
5093
38547
4808
74607
71200
88387
94071
45031
83426
83246
96061
91471
37207
57815
30779
45176
70833
29490
27760
74104
21444
73173
10086
56241
48369
73755
93275
66791
2437
18827
61990
3213
43007
46942
47386
98002
80099
90898
28860
53348
3790
54478
50789
53673
81845
76946
31398
15539
43923
68172
43943
11674
5147
49577
7639
2902
56983
51372
87907
65260
46019
69134
65982
35068
81730
76650
67535
65607
86101
4387
9658
56971
38760
90175
26434
22509
10166
19048
3135
28671
63621
90284
56798
82077
15749
77755
45814
51006
26305
31977
48619
18712
90691
8001
32067
70357
38111
41552
74876
81391
40492
24784
22370
39440
57089
73160
45027
53617
35969
46450
40871
71843
12703
17953
52853
69725
67213
62722
73693
91338
14128
12506
75060
56344
31645
23821
2907
2229
7702
54151
49626
34757
19073
1923
11433
4156
34993
47527
28810
55157
69505
65503
64854
23249
79143
9697
35584
42411
13695
7789
66572
60321
54166
71208
76781
69793
42022
52118
62723
2774
17563
10157
73884
64476
44243
84801
83448
68584
56296
77751
95159
23154
24632
8184
39214
52344
46545
33325
85650
14755
92211
34714
41604
90705
97995
76462
85611
76657
58480
7258
91761
17400
74630
8191
83012
85542
71016
35146
50365
37585
62220
2323
23949
50093
8154
66092
75562
15603
49424
19639
37679
18186
78875
40160
63991
10977
53885
83218
34001
3723
63889
1
40515
36743
42770
32026
24502
52208
17897
78882
26409
74817
50557
4129
97514
67021
28240
45301
98467
53298
94746
59508
4533
28812
79175
57458
71279
14985
61081
72641
50192
24833
10559
3359
31540
74717
6619
34886
22723
62826
4364
44080
4087
31292
76363
98421
92175
71837
88423
84188
63345
30108
18021
38992
73015
6978
19730
77314
20601
73041
40457
43550
33086
86253
71896
24236
1291
9491
16822
91587
98602
26555
30077
10302
24493
2985
39469
90347
30520
42477
56481
5914
38961
10218
16024
93342
92630
7566
74142
54657
81366
88386
85815
4565
5439
1104
2673
65606
83445
70854
9537
73222
2544
31425
63015
81452
90318
75062
83615
19052
92492
48714
85098
15267
31282
91826
92471
43067
73944
47591
71457
79798
90235
60824
53372
53812
27261
49099
19917
76978
99670
58487
33747
16944
30719
18716
76276
93076
70826
63639
85111
98441
21908
35279
33927
33433
77583
95025
31616
25321
37617
93145
11286
15024
6719
64723
4077
78584
30370
98798
67730
21048
1287
87867
44930
4798
37691
61593
86819
50990
9059
57590
71412
14209
43285
79232
43891
290
36110
69671
88539
59260
88464
54759
40328
37037
85253
94603
18976
89833
74448
90717
20688
18961
46537
53603
42627
39150
8087
37842
80079
33426
48812
47406
10748
44375
61932
80967
63310
7592
70797
1452
3192
30692
27239
31166
77857
51830
22097
68817
55733
33720
78069
51195
32571
12279
28924
66443
51929
95208
55440
17321
82411
38022
61143
50625
2213
8447
95005
15634
39956
99281
88705
97294
67363
47231
17704
69554
19093
38744
709
50363
21233
75916
53339
97687
88562
35763
85496
96919
60369
9870
11363
9941
6401
38441
91650
9102
62077
19340
10745
42333
66689
39672
6473
15741
61335
31890
16099
15865
6445
81665
85352
8749
65186
11147
62916
33332
84931
39050
34043
79368
16678
85675
17812
29439
26532
82653
65587
57526
21148
29904
27408
7756
23943
33633
49278
28774
72872
9540
53171
64267
52998
4098
29864
36202
47534
50455
82772
12347
34049
78222
90264
10215
84769
42361
13264
13181
66773
26246
74122
84239
9743
33012
32183
2602
70562
20340
62909
73842
5968
44347
60842
3905
54985
57584
10738
39266
70711
60420
41807
10619
27691
28387
47429
65781
49825
1752
27004
79338
6714
19519
22796
4086
66695
82806
81923
70029
78043
17813
74517
1511
25527
20419
26266
90542
27647
56104
17055
62523
64731
65832
49687
46803
69704
50396
2311
87194
92658
70094
91902
29154
2953
14475
21086
26777
6337
6024
43316
75225
96054
41957
8842
39904
43313
33834
37062
51515
23681
73489
81967
93066
76128
48996
55462
10655
3320
32287
13924
32838
4013
85822
33106
15586
62938
67492
18225
7109
72726
93494
97566
24625
6993
46189
13906
70171
92259
21202
68892
96783
62823
62087
70942
92548
64324
42702
47758
39682
68866
50780
90020
12259
15487
28282
73821
13175