Решено от K Gayashan

Избран алгоритъм за сортиране Въпроси и отговори с помощта на езика за програмиране Java

Въпрос

Да приемем, че отбор от 50 играча трябва да подреди в низходящ ред въз основа на датата на поставяне на ваксината срещу covid19, за да идентифицира 15 играчи, които са се ваксинирали първи.

(1) Проектирайте и разработете подходящ алгоритъм за сортиране, за да сортирате тези играчи въз основа на тяхната дата на ваксинация.

(2) Приложете алгоритъма за сортиране с помощта на език за програмиране java.

(3) Ръчно проследяване на алгоритъма, като се използва напълно различен набор от дати за петима играчи.

(4) Изчислете сложността на програмата, която сте внедрили по-горе.

Отговор

Използван е алгоритъм за сортиране с мехурчета за решаване на този проблем.

1)

Псевдокод за балонно сортиране

2) Внедряване на Java код

импортиране java.time.LocalDate;

публични клас играчи {

публично име на низ;

публичен LocalDate vDate;

public Players(String name, LocalDate d) {

това.name = име;

vDate = d;

}

// Функция

public static void sortDesc(Players[] team) {

int i, j;

за (i = 0; i ‹ (team.length — 1); i++) {

за (j = 0; j ‹ team.length — i — 1; j++) {

if (team[j].vDate.isBefore(team[j + 1].vDate)) {

LocalDate temp = team[j].vDate;

екип[j].vДата = екип[j + 1].vДата;

екип [j + 1].vДата = темп;

String tName = team[j].name;

екип[j].име = отбор[j + 1].име;

team[j + 1].name = tName;

}

}

}

}

// основен метод

public static void main(String[] args) {

ви;

Играчи[] отбор = нови играчи[15];

// вмъкване на 15 играча

team[0] = нови играчи(“Nimal”, LocalDate.of(2021, 4, 20));

team[1] = нови играчи(„Kamal“, LocalDate.of(2021, 5, 7));

отбор[2] = нови играчи(“Sunimal”, LocalDate.of(2021, 5, 1));

отбор[3] = нови играчи(„Амали“, местна дата.на(2021, 7, 2));

team[4] = нови играчи(„Sriua“, LocalDate.of(2021, 8, 4));

team[5] = нови играчи(„Nisha“, LocalDate.of(2021, 5, 20));

отбор[6] = нови играчи(„Nimala“, LocalDate.of(2021, 3, 20));

отбор[7] = нови играчи(„Саман“, местна дата.на(2021, 4, 7));

отбор[8] = нови играчи(“Sunil”, LocalDate.of(2021, 10, 5));

отбор[9] = нови играчи(“Shsheka”, LocalDate.of(2021, 2, 2));

team[10] = нови играчи(„Udaya“, LocalDate.of(2021, 4, 6));

team[11] = нови играчи(„Kasun“, LocalDate.of(2021, 8, 15));

отбор[12] = нови играчи(„Камани“, местна дата.на(2021, 7, 19));

отбор[13] = нови играчи („Сумеда“, местна дата.на(2021, 6, 14));

отбор[14] = нови играчи („Сюзън“, местна дата.на(2021, 7, 11));

sortDesc(екип);

System.out.println(“Сортирани (Desc) дата на ваксинирани играчи са били ваксинирани.”);

за (i = 0; i ‹ team.length; i++) {

System.out.println(“ Име: “ + team[i].name + “ -› Дата на ваксиниране: “ + team[i].vDate);

}

}

}

___________________________________________________-

Изход

Сортирани (Desc) ваксинирани дати, на които играчите са ваксинирани.

Име: Сунил -› Дата на ваксиниране: 2021–10–05

Име: Касун -› Дата на ваксиниране: 15 август 2021 г

Име: Sriua -› Дата на ваксиниране: 2021–08–04

Име: Камани -› Дата на ваксиниране: 19.07.2021 г

Име: Сюзън -› Дата на ваксиниране: 2021–07–11

Име: Амали -› Дата на ваксиниране: 2021–07–02

Име: Сумеда -› Дата на ваксиниране: 14.06.2021 г

Име: Ниша -› Дата на ваксиниране: 20.05.2021 г

Име: Камал -› Дата на ваксиниране: 2021–05–07

Име: Sunimal -› Дата на ваксиниране: 2021–05–01

Име: Нимал -› Дата на ваксиниране: 20.04.2021 г

Име: Саман -› Дата на ваксиниране: 7 април 2021 г

Име: Удая -› Дата на ваксиниране: 2021–04–06

Име: Нимала -› Дата на ваксиниране: 20.03.2021 г

Име: Шшека -› Дата на ваксинация: 2021–02–02

__________________________________________

3) Сортиране с мехурче за проследяване на ръцете

4) Сложност на алгоритъма за балонно сортиране

int i, j;

// първи цикъл

за (i = 0; i ‹ (team.length — 1); i++) {

// втори цикъл

за (j = 0; j ‹ team.length — i — 1; j++) {

if (team[j].vDate.isBefore(team[j + 1].vDate)) {

LocalDate temp = team[j].vDate;

екип[j].vДата = екип[j + 1].vДата;

екип [j + 1].vДата = темп;

String tName = team[j].name;

екип[j].име = отбор[j + 1].име;

team[j + 1].name = tName;

}

}

}

  • В горния код има два for цикъла, например „for (i = 0; i ‹ (team.length — 1); i++) “ външен и for (j = 0; j ‹ team.length — i — 1; j++ ) вътрешен контур.
  • Вътрешният цикъл се изпълнява следния брой пъти.
  • (n-1) + (n-2) +…+(n-ksorted) = ½(2n-ksorted-1)ksorted . Където ksorted е броят на изпълненията на външния цикъл, преди да има преминаване, по време на което няма обмен.
  • Вътрешният цикъл съдържа едно сравнение и понякога обмен.
  • Най-лошият случай се получава, когато ksorted е n-1. Вътрешният цикъл се изпълнява, както следва, ½ (2n — (n-1) ‐1)(n‐1) = ½ n(n‐1) = O (n2)

Основното предимство на Bubble Sort е простотата на алгоритъма.