Анализируйте сортировку выбора с помощью асимптотики Big O построчно!
ОБЗОР
Сортировка по выбору - это алгоритм сортировки в информатике. Он имеет временную сложность O (n²). O (n²) - неподходящая временная сложность для сортировки списков, когда дело доходит до больших размеров ввода. Этот алгоритм сортирует массив или список, многократно находя минимальное значение (если мы выполняем сортировку в порядке возрастания) из списка или массива и помещая его в начало списка. Здесь я собираюсь построчно перейти к алгоритму сортировки выбора, чтобы вычислить время выполнения алгоритмов.
arr[] = 65 25 12 22 10 // Find the minimum element in arr[0...4] // and place it at beginning 10 30 12 22 65 // Find the minimum element in arr[1...4] // and place it at beginning of arr[1...4] 10 12 30 22 65 // Find the minimum element in arr[2...4] // and place it at beginning of arr[2...4] 10 12 22 30 65 // Find the minimum element in arr[3...4] // and place it at beginning of arr[3...4] 10 12 22 30 65
Код сортировки выбора
Выборка Сортировка анализа программы C
Здесь я собираюсь проанализировать код, выполняемый построчно (это не включает комментарии). Это две вещи, которые нам нужно отслеживать, чтобы анализировать временную сложность алгоритма сортировки выбора, и это затраты, необходимые для выполнения. оператор в каждой строке и количество раз, когда оператор в этой строке выполняется.
// C program for implementation of selection sort //NOTE: REMOVE The Line Numbers (e.g. Line 1.) if you want to run this code // I inserted them to help with the analysis
#include <stdio.h>
void
selectionSort(int
arr[], int
n) { Line 1.int
i, j, min_idx; // One by one move boundary of unsorted subarray Line 2. for
(i = 0; i < n; i++){
// Find the minimum element in unsorted array Line 3. min_idx = i;
Line 4. for
(j = i+1; j < n; j++){ Line 5. if
(arr[j] < arr[min_idx]) Line 6. min_idx = j;}
// Swap the found minimum element with the first element Line 7. int temp = arr[min_dx]; Line 8. arr[min_dx] = arr[i]; Line 9. arr[i] = temp; } }
/* Function to print an array */ void
printArray(int
arr[], int
size){ int
i; for
(i=0; i < size; i++) printf("%d ", arr[i]);
printf("\n"); }
// Driver program to test above functions int
main(){ int
arr[] = {64, 25, 12, 22, 11}; int
n = sizeof(arr)/sizeof(arr[0]); selectionSort(arr, n); printf("Sorted array: \n"); printArray(arr, n);
return
0; }
Внутри функции selectionSort:
Строка 1: COST = C1, TIME = 1, где C1 - некоторая константа
Строка 2: COST = C2, ВРЕМЯ = n + 1, где C2 - некоторая константа
Строка 3: COST = C3, TIME = n, где C3 - некоторая константа
Строка 4: СТОИМОСТЬ = C4, ВРЕМЯ = (n²-n) / 2 + n, где C4 - некоторая константа
Строка 5: COST = C5, TIME = (n²-n) / 2, где C5 - некоторая константа
Строка 6: COST = C6, ВРЕМЯ = (n²-n) / 2, где C6 - некоторая константа
Строка 7: COST = C7, TIME = n , где C7 - некоторая константа
Строка 8: COST = C8, TIME = n, где C5 - некоторая константа
Строка 9: СТОИМОСТЬ = C9, ВРЕМЯ = n, где C9 - некоторая константа.
Видео, показывающее, как я вычислил ВРЕМЯ для каждой выполняемой строки кода, находится ниже, или вы можете нажать здесь, чтобы посмотреть. Теперь, когда у нас есть все затраты и времена, мы должны суммировать все затраты, умноженные на время выполнения:
Время выполнения = (C1 * 1) + (C2 * (n + 1)) + (C3 * n) + (C4 * ((n²-n) / 2) + n) + (C5 * (n²-n) / 2) + (C6 * (n²-n) / 2) + (C7 * n) + (C8 * n) + (C9 * n)
Где U, V и W - константы
= U + Vn + Wn²
= O (n²)
Если вы хотите узнать больше об Анализ алгоритмов, вы можете пройти мой онлайн-курс здесь. У меня также есть курс на Udemy.com под названием Recurrence Relation Made Easy, где я помогаю студентам понять, как решать повторяющиеся отношения и асимптотические термины, такие как Big-O, Big Omega и Theta. Вы можете посмотреть мой канал на YouTube с видео, где я решаю рекуррентные отношения и выполняю анализ алгоритмов кода, который любой может проверить бесплатно!
Спасибо за прочтение этой статьи, надеюсь, она будет вам полезна! Продолжайте учиться, и если вы хотите больше видео по информатике, программированию и анализу алгоритмов, посетите и подпишитесь на мои каналы YouTube (randerson112358 и compsci112358)
Ознакомьтесь со следующими материалами / видео по информатике, анализу алгоритмов, программированию и логике:
Канал YouTube:
randerson112358: https://www.youtube.com/channel/UCaV_0qp2NZd319K4_K8Z5SQ
compsci112358:
https://www.youtube.com/channel/UCbmb5IoBtHZTpYZCDBOC1CA
Веб-сайт:
http://everythingcomputerscience.com/
Видеоуроки по взаимосвязи повторяемости:
https://www.udemy.com/recurrence-relation-made-easy/
Видеоурок по анализу алгоритмов:
https://www.udemy.com/algorithm-analysis/
Twitter:
https://twitter.com/CsEverything
"YouTube канал:"
Веб-сайт по информатике:
Видео Udemy по алгоритмическому анализу:
РЕСУРСЫ:
[1] https://www.geeksforgeeks.org/selection-sort/
Http://www.cs.cornell.edu/courses/cs211/2005sp/Lectures/L14-BigO/L14-15-Complexity.4up.pdf
Https://math.stackexchange.com/questions/417853/selection-sort-algorithm-analysis