Sprawdź się
Uzupełnij podany kod tak, aby realizował algorytm sortowania pozycyjnego dat z użyciem sortowania bąbelkowego. Powinien sortować daty niemalejąco.
Specyfikacja:
Dane:
daty– tablica łańcuchów znaków; każda z dat zapisana jest w formacierrrr‑mm‑dd
Wynik:
daty– posortowana niemalejąco tablica ciągów znaków zawierająca daty (każda data zapisana w osobnej linii)
Przykładowe rozwiązanie zadania:
public class Main {
static void sortowaniePozycyjne(String[] daty) {
for (int i = 9; i >= 0; i--) {
if (i == 4 || i == 7) {
continue;
}
sortowanieBabelkowe(daty, i);
}
}
static void sortowanieBabelkowe(String[] daty, int indeks) {
String temp;
boolean czyZmiana = false;
for (int i = 0; i < daty.length; i++) {
for (int j = 0; j < daty.length - 1; j++) {
if (daty[j].charAt(indeks) > (daty[j + 1].charAt(indeks))) {
temp = daty[j];
daty[j] = daty[j + 1];
daty[j + 1] = temp;
czyZmiana = true;
}
}
if (!czyZmiana) {
break;
}
}
}
public static void main(String[] args) {
String[] daty = {
"1410-07-15",
"1453-05-29",
"2020-03-05",
"2020-04-20",
"1342-12-03"
};
sortowaniePozycyjne(daty);
for (int i = 0; i < daty.length; i++) {
System.out.println(daty[i]);
}
}
}Wykorzystując algorytm sortowania pozycyjnego liczb z algorytmem sortowania przez zliczanie, napisz program, który obliczy, ile dat w zbiorze jest ułożonych chronologicznie po dacie upadku Konstantynopola (1453‑05‑29).
Specyfikacja:
Dane:
daty– tablica łańcuchów znaków; każda z dat zapisana jest w formacierrrr‑mm‑dd
Wynik:
x– liczba naturalna; liczba dat w zbiorze ułożonych chronologicznie po danej dacie
Przykładowe rozwiązanie zadania:
public class Main {
static String dane[] = {
"1569-07-01",
"1410-07-15",
"1453-05-29",
"1453-07-17",
"1452-09-30",
"1386-03-04"
};
static void sortowaniePrzezZliczanie(int indeksZnaku) {
String temp[] = new String[dane.length];
int tablicaZliczenCyfr[] = new int[10];
for (int i = 0; i < dane.length; i++) {
int odczytanaCyfra = dane[i].charAt(indeksZnaku) - '0';
tablicaZliczenCyfr[odczytanaCyfra]++;
}
for (int i = 1; i < 10; i++) {
tablicaZliczenCyfr[i] = tablicaZliczenCyfr[i] + tablicaZliczenCyfr[i - 1];
}
for (int i = dane.length - 1; i >= 0; i--) {
int odczytanaCyfra = dane[i].charAt(indeksZnaku) - '0';
int indeksWTablicyWynikowej = tablicaZliczenCyfr[odczytanaCyfra] - 1;
temp[indeksWTablicyWynikowej] = dane[i];
tablicaZliczenCyfr[odczytanaCyfra]--;
}
for (int i = 0; i < dane.length; i++) {
dane[i] = temp[i];
}
}
static int policzWydarzeniaPoDacie(String data) {
int indeks = dane.length;
for (int i = 0; i < dane.length; i++) {
if (dane[i].equals(data)) {
indeks = i;
break;
}
}
return dane.length - indeks - 1;
}
public static void main(String args[]) {
for (int i = 9; i >= 0; i--) {
if (i == 7 || i == 4) {
continue;
}
sortowaniePrzezZliczanie(i);
}
System.out.print(policzWydarzeniaPoDacie("1453-05-29"));
}
}Organizatorzy rajdu rowerowego zastanawiają się, jaka jest mediana wieku zawodników. Dysponują listą dat urodzin zawodników. Napisz program, który wyznaczy medianę spośród dat urodzin i wydrukuje ją na standardowe wyjście.
Specyfikacja:
Dane:
daty– tablica łańcuchów znaków; każda z dat zapisana jest w formacierrrr‑mm‑dd
Wynik:
x– ciąg znaków; mediana podanego zbioru w formacierrrr‑mm‑dd
Przykładowe rozwiązanie zadania:
public class Main {
static String dane[] = {
"1999-02-14",
"1984-02-09",
"1987-12-31",
"1993-03-24",
"2001-07-01",
"1996-02-26",
"1982-11-21",
"1990-05-27",
"1992-09-10",
"1996-09-26",
"1998-12-11"
};
static void sortowaniePrzezZliczanie(int indeksZnaku) {
String temp[] = new String[dane.length];
int tablicaZliczenCyfr[] = new int[10];
for (int i = 0; i < dane.length; i++) {
int odczytanaCyfra = dane[i].charAt(indeksZnaku) - '0';
tablicaZliczenCyfr[odczytanaCyfra]++;
}
for (int i = 1; i < 10; i++) {
tablicaZliczenCyfr[i] = tablicaZliczenCyfr[i] + tablicaZliczenCyfr[i - 1];
}
for (int i = dane.length - 1; i >= 0; i--) {
int odczytanaCyfra = dane[i].charAt(indeksZnaku) - '0';
int indeksWTablicyWynikowej = tablicaZliczenCyfr[odczytanaCyfra] - 1;
temp[indeksWTablicyWynikowej] = dane[i];
tablicaZliczenCyfr[odczytanaCyfra]--;
}
for (int i = 0; i < dane.length; i++) {
dane[i] = temp[i];
}
}
public static void main(String args[]) {
for (int i = 9; i >= 0; i--) {
if (i == 7 || i == 4) {
continue;
}
sortowaniePrzezZliczanie(i);
}
System.out.print(dane[6]);
}
}