Successfully reported this slideshow.
Your SlideShare is downloading. ×

Урок 7. Реализация алгоритмов на языке Java

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 31 Ad

Урок 7. Реализация алгоритмов на языке Java

Download to read offline

Реализация алгоритмов на языке Java:
среднее арифметическое, числа Фибоначчи, вычисление сложности алгоритма, метод swap, инвертирование массива, сортировка пузырьком, сортировка выбором, поиск элемента.
Лекции, задания, видео, тесты и вопросы на:
https://www.examclouds.com/java/java-core-russian/sorting-algoritms
Подписывайтесь на страницу:
https://www.facebook.com/Examclouds
Подписывайтесь на канал
https://www.youtube.com/c/tatyanamilkina

Реализация алгоритмов на языке Java:
среднее арифметическое, числа Фибоначчи, вычисление сложности алгоритма, метод swap, инвертирование массива, сортировка пузырьком, сортировка выбором, поиск элемента.
Лекции, задания, видео, тесты и вопросы на:
https://www.examclouds.com/java/java-core-russian/sorting-algoritms
Подписывайтесь на страницу:
https://www.facebook.com/Examclouds
Подписывайтесь на канал
https://www.youtube.com/c/tatyanamilkina

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Advertisement

Урок 7. Реализация алгоритмов на языке Java

  1. 1. Урок 7 Реализация алгоритмов на языке Java 1. Среднее арифметическое 2. Числа Фибоначчи 3. Вычисление сложности алгоритма 4. Метод swap 5. Инвертирование массива 6. Сортировка пузырьком 7. Сортировка выбором 8. Поиск элемента www.examclouds.com
  2. 2. Пример вычисления среднего арифметического public class Average { public static void main(String[] args) { double[] nums = {10.1, 11.2, 12.3, 13.4, 14.5}; double result = 0; for (double d : nums) { result += d; } System.out.println("Среднее арифметическое " + result / nums.length); } } www.examclouds.com
  3. 3. Числа Фибоначчи Чи́сла Фибона́ччи — элементы числовой последовательности 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, … в которой первые два числа равны либо 1 и 1, либо 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел. www.examclouds.com
  4. 4. Числа Фибоначчи private static long recursive(int n) { if (n <= 1) { return n; } return recursive(n - 2) + recursive(n - 1); } www.examclouds.com
  5. 5. Числа Фибоначчи private static long calculateWithFor(int n) { long first = 0; long second = 1; long result = n; for (int i = 1; i < n; i++) {//O(n) result = first + second; first = second; second = result; } return result; } www.examclouds.com
  6. 6. Числа Фибоначчи www.examclouds.com
  7. 7. Сложность алгоритма ⚫Сложность алгоритмов обычно оценивают по времени выполнения или по используемой памяти. ⚫Асимптотическая сложность - сложность при стремлении размера входных данных к бесконечности. ⚫O(1) – константная сложность; ⚫O(n) — линейная сложность ⚫O(log n) — логарифмическая сложность ⚫ O(n*log(n)) - квазилинейная сложность ⚫O(n2) — квадратичная сложность ⚫O(2^n) - экспоненциальная сложность www.examclouds.com
  8. 8. Сложность алгоритма www.examclouds.com
  9. 9. График роста www.examclouds.com
  10. 10. www.examclouds.com
  11. 11. Обмен значениями Вариант1: обмен значениями с использованием временной переменной int tmp = a; a = b; b = tmp; Вариант2: обмен значениями без использования временной переменной a = a + b; b = a - b; a = a - b; www.examclouds.com
  12. 12. Пример обмена значениями public class ChangeValues1 { public static void main(String[] args) { int a = 3; int b = 5; int tmp = a; a = b; b = tmp; System.out.println("a = " + a); System.out.println("b = " + b); } } www.examclouds.com
  13. 13. Пример обмена значениями public class ChangeValues2 { public static void main(String[] args) { int a = 3; int b = 5; a = a + b; // a = 8, b = 5 b = a - b; // a = 8, b = 3 a = a - b; // a = 5, b = 3 System.out.println("a = " + a); System.out.println("b = " + b); } } www.examclouds.com
  14. 14. Пример инвертирования массива public class ArrayInverter { public static void invert(int[] array) { for (int i = 0; i < array.length / 2; i++) { int tmp = array[i]; array[i] = array[array.length - i - 1]; array[array.length - i - 1] = tmp; } } } www.examclouds.com
  15. 15. Пример инвертирования массива import java.util.Arrays; public class ArrayInverterTest1 { public static void main(String[] args) { int[] array1 = new int[]{}; System.out.print(Arrays.toString(array1) + " => "); ArrayInverter.invert(array1); System.out.println(Arrays.toString(array1)); array1 = new int[]{0}; System.out.print(Arrays.toString(array1) + " => "); ArrayInverter.invert(array1); System.out.println(Arrays.toString(array1)); array1 = new int[]{0, 1}; System.out.print(Arrays.toString(array1) + " => "); ArrayInverter.invert(array1); System.out.println(Arrays.toString(array1)); array1 = new int[]{0, 1, 2}; System.out.print(Arrays.toString(array1) + " => "); ArrayInverter.invert(array1); System.out.println(Arrays.toString(array1)); array1 = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; System.out.print(Arrays.toString(array1) + " => "); ArrayInverter.invert(array1); System.out.println(Arrays.toString(array1)); } } www.examclouds.com
  16. 16. Пример инвертирования массива public class ArrayInverterTest2 { public static void main(String[] args) { testInvert(new int[]{}); testInvert(new int[]{0}); testInvert(new int[]{0, 1}); testInvert(new int[]{0, 1, 2, 3, 4}); } private static void testInvert(int[] array) { System.out.print(Arrays.toString(array) + " => "); ArrayInverter.invert(array); System.out.println(Arrays.toString(array)); } } www.examclouds.com
  17. 17. Задание 5 ⚫Добавить в программу ArrayInverterTest2 еще один тестовый массив. ⚫Делаем дебаг и смотрим как работает. www.examclouds.com
  18. 18. 6 5 4 3 0 0 www.examclouds.com
  19. 19. Сортировка пузырьком Расположим массив сверху вниз, от нулевого элемента - к последнему. Идея метода: шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами. www.examclouds.com
  20. 20. Сортировка пузырьком public class BubbleSorter { public static void sort(int[] array) { // i - номер прохода for (int i = 0; i < array.length - 1; i++) { // внутренний цикл прохода for (int j = array.length - 1; j > i; j--) { if (array[j - 1] > array[j]) { int tmp = array[j - 1]; array[j - 1] = array[j]; array[j] = tmp; } } } } } www.examclouds.com
  21. 21. Сортировка пузырьком import java.util.Arrays; public class BubbleSorterTest { public static void main(String[] args) { int[][] data = { {}, {1}, {0, 3, 2, 1}, {4, 3, 2, 1, 0}, {6, 8, 3, 123, 5, 4, 1, 2, 0, 9, 7}, }; for (int[] arr : data) { System.out.print(Arrays.toString(arr) + " => "); BubbleSorter.sort(arr); System.out.println(Arrays.toString(arr)); } } } www.examclouds.com
  22. 22. Сортировка выбором Идея метода состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке. На i-м шаге выбираем наименьший из элементов a[i] ... a[n] и меняем его местами с a[i]. www.examclouds.com
  23. 23. Сортировка выбором public class SelectionSorter { public static void sort(int[] array) { for (int i = 0; i < array.length; i++) { // i - номер текущего шага int pos = i; int min = array[i]; // цикл выбора наименьшего элемента for (int j = i + 1; j < array.length; j++) { if (array[j] < min) { pos = j; // pos - индекс наименьшего элемента min = array[j]; } } array[pos] = array[i]; array[i] = min; // меняем местами наименьший с array[i] } } } www.examclouds.com
  24. 24. Сортировка выбором public class SelectionSorterTest { public static void main(String[] args) { int[][] data = { {}, {1}, {0, 3, 2, 1}, {4, 3, 2, 1, 0}, {6, 8, 3, 123, 5, 4, 1, 2, 0, 9, 7}, }; for (int[] arr : data) { System.out.print(Arrays.toString(arr) + " => "); SelectionSorter.sort(arr); System.out.println(Arrays.toString(arr)); } } } www.examclouds.com
  25. 25. Поиск элемента ⚫Линейный поиск - О(n) ⚫Двоичный поиск - O(log (N)) ⚫Поиск прыжками - O(sqrt (N)) ⚫Интерполяционный поиск - O(log log N) ⚫Экспоненциальный поиск - O(log (N)) www.examclouds.com
  26. 26. Линейный поиск public static int linearSearch(int[] array, int elementToSearch) { for (int i = 0; i < array.length; i++) { if (array[i] == elementToSearch) { return i; } } return -1; } www.examclouds.com
  27. 27. Двоичный поиск ⚫Двоичный или логарифмический поиск часто используется из-за быстрого времени поиска. ⚫Этот вид поиска использует подход «Разделяй и властвуй», требует предварительной сортировки набора данных. www.examclouds.com
  28. 28. Двоичный поиск, итеративный подход public static int binarySearch(int[] array, int elementToSearch) { int firstIndex = 0; int lastIndex = array.length - 1; // условие прекращения (элемент не представлен) while (firstIndex <= lastIndex) { int middleIndex = (firstIndex + lastIndex) / 2; // если средний элемент - целевой элемент, вернуть его индекс if (array[middleIndex] == elementToSearch) { return middleIndex; } // если средний элемент меньше // направляем наш индекс в middle+1, убирая первую часть из рассмотрения else if (array[middleIndex] < elementToSearch) { firstIndex = middleIndex + 1; } // если средний элемент больше // направляем наш индекс в middle-1, убирая вторую часть из рассмотрения else if (array[middleIndex] > elementToSearch) { lastIndex = middleIndex - 1; } } return -1; } www.examclouds.com
  29. 29. Двоичный поиск, рекурсивный подход public static int recursiveBinarySearch(int[] array, int firstElement, int lastElement, int elementToSearch // условие прекращения if (lastElement >= firstElement) { int middle = (lastElement + firstElement) / 2; // если средний элемент - целевой элемент, вернуть его индекс if (array[middle] == elementToSearch) { return middle; } // если средний элемент больше целевого // вызываем метод рекурсивно по суженным данным if (array[middle] > elementToSearch) { return recursiveBinarySearch(array, firstElement, middle - 1, elementToSearch); } // также, вызываем метод рекурсивно по суженным данным return recursiveBinarySearch(array, middle + 1, lastElement, elementToSearch); } return -1; } www.examclouds.com
  30. 30. Поиск прыжками public static int jumpSearch(int[] array, int elementToSearch) { int arrayLength = array.length; int jumpStep = (int) Math.sqrt(array.length); int previousStep = 0; while (array[Math.min(jumpStep, arrayLength) - 1] < elementToSearch) { previousStep = jumpStep; jumpStep += (int) (Math.sqrt(arrayLength)); if (previousStep >= arrayLength) { return -1; } } while (array[previousStep] < elementToSearch) { previousStep++; if (previousStep == Math.min(jumpStep, arrayLength)) { return -1; } } if (array[previousStep] == elementToSearch) { return previousStep; } return -1; } www.examclouds.com
  31. 31. Лекции, задания, видео, тесты и вопросы на: ⚫ https://www.examclouds.com/java/java-core- russian/sorting-algoritms Подписывайтесь на страницу: ⚫ https://www.facebook.com/Examclouds ⚫ Подписывайтесь на канал https://www.youtube.com/c/tatyanamilkina www.examclouds.com

×