я получил алгоритм вставки рода ниже, она включает в себя вложенный цикл:вложенного цикла анализ сложности Продолжительность
public InsertionSort(AnyType [] a){
int m;
for(int n = 1; n < a.length; n++){
AnyType temp = a[n];
for(m = n; m > 0 && tmp.compareTo(a[ m - 1]) <= 0; m--)
a[ m ] = a[ m - 1 ];
a[ m ] = temp;
}
}
Первый цикл имеет время работы O (N), а второй O (N^2), поэтому общее время работы в вложенном цикле должно быть O (N * N^2 = N^3), верно? Но я знаю, что худший случай должен быть O (N^2) в сортировке вставки, однако мой учитель изменил этот сегмент кода, который книга немного, заменив [m - 1]) < = 0, вместо использования a [m - 1]) < 0. Так что я смущен, что, как я понял, дело хуже худшего. Кто-нибудь помогает? Заранее спасибо.
Вторая петля также выглядит для меня «O (N)», которая даст ожидаемую общую производительность O (N^2) для сортировки вставки. –
Но если я попробую сортировать массив, который имеет все те же элементы, количество сравнений и свопов - все 1 + 2 + 3 + ... n-1 раз, пока сортировка не закончится, поэтому я получаю n (n-1)/2 = O (n^2) – Student
И это не традиционный код для сортировки вставки, мой учитель немного изменил, заменив [m - 1]) <= 0, вместо использования [m - 1]) <0 – Student