I have a list of data in a txt file like this
Date,Lat,Lon,Depth,Mag
20000101,34.6920,-116.3550,12.30,1.21
20000101,34.4420,-116.2280,7.32,1.01
20000101,37.4172,-121.7667,5.88,1.14
20000101,-41.1300,174.7600,27.00,1.90
20000101,37.6392,-119.0482,2.40,1.03
20000101,32.1790,-115.0730,6.00,2.44
20000101,59.7753,-152.2192,86.34,1.48
20000101,34.5230,-116.2410,11.63,1.61
20000101,59.5369,-153.1360,100.15,1.62
20000101,44.7357,-110.7932,4.96,2.20
20000101,34.6320,-116.2950,9.00,1.73
20000101,44.7370,-110.7938,5.32,1.75
20000101,35.7040,-117.6320,4.15,1.45
20000101,41.9270,20.5430,10.00,4.80
my assignment is to sort these data by each criterion ex) sort by date, latitude and longtitude
i tried bubble sort like this
if ( Double.parseDouble(a[0].split(",")[1]) < Double.parseDouble(a[1].split(",")[1]))
this works but takes too much time
theres 40000
data in the txt file
is there any alternative way to sort these data?
Try a merge sort. Merge sort has a worst case performance of O(n log n). Bubble sort's worst case time is O(n^2).
I'm probably ruining some students’ homework assignment, but here goes…
As suggested on the Question, the natural way in Java is to create a class to represent your data. Then implement a
Comparator
to be passed to the utility methodCollections.sort
.On my MacBook Pro 2.3 GHz Intel Core i7 running a Parallels virtual machine with Java 8, a data set of 42,000 elements takes between 45-90 milliseconds to sort.
I changed your example data to be more interesting, introducing some varied dates and duplicate latitudes.
My
GeoReading
class to represent the data.Here is the Comparator implementation.
Main code.
In the real world I would add some defensive-programming code to verify the incoming data. Data from external sources is always defective and/or changing.