Моя цель - сортировать матрицу с событиями в соответствии с их датами (хранится в матрице как события [eventIndex] [1]. Как-то я получаю почти правильный вывод, за исключением того, в смелойСортировка массива с датами (Quicksort)
должен ли я сортировать год, месяцы и дни отдельно Или у меня сома логическая ошибка в моей сравнить метод
Перед сортировкой:?
12/24/2015
12/19/2015
12/30/2015
11/13/2015
12/30/2015
01/15/2016
12/31/2015
01/15/2016
12/24/2015
12/19/2015
12/31/2015
01/15/2016
После сортировки:
11/13/2015
12/19/2015
12/19/2015
12/24/2015
12/24/2015
12/30/2015
12/31/2015
12/30/2015
12/31/2015
01/15/2016
01/15/2016
01/15/2016
Вот мой код.
public void quickSort(String[][] event, int low, int high, Compare c) {
if (event == null || event.length == 0)
return;
if (low >= high)
return;
// pick the pivot
int middle = low + (high - low)/2;
// make left < pivot and right > pivot
int i = low, j = high;
while (i <= j) {
while (c.compare(i, middle)) {
i++;
}
while (c.compare(middle, j)) {
j--;
}
if (i <= j) {
String[] temp = event[i];
event[i] = event[j];
event[j] = temp;
i++;
j--;
}
}
// recursively sort two sub parts
if (low < j)
quickSort(event, low, j,c);
if (high > i)
quickSort(event, i, high,c);
}
//Interface for comparing two types
public interface Compare {
boolean compare(int first, int second);
}
public class CompareDate implements Compare {
@Override
public boolean compare(int first, int second) {
//Splitting up the date string and converts into int
//Splitting first index
String[] temp = event[first][1].split("/");
int firstYear = Integer.parseInt(temp[2]);
int firstMonth = Integer.parseInt(temp[0]);
int firstDay = Integer.parseInt(temp[1]);
//Splitting second index
temp = event[second][1].split("/");
int secondYear = Integer.parseInt(temp[2]);
int secondMonth = Integer.parseInt(temp[0]);
int secondDay = Integer.parseInt(temp[1]);
//Comparing the values
if (firstYear < secondYear) return true;
else if (secondYear < firstYear) return false;
else if (firstMonth < secondMonth) return true;
else if (secondMonth < firstMonth) return false;
return (firstDay < secondDay);
}
}
Вы можете сначала отсортировать годы, затем месяцы, а затем дни. Или даже использовать объекты даты и список и компаратор –