Почему сортировка вставками с использованием двоичного поиска выполняется медленнее, чем сортировка вставками с использованием линейного поиска?
Код для сортировки вставками с использованием линейного поиска:
void InsertionSort(int data[], int size)
{
int i=0, j=0, temp=0;
for(i=1; i<size; i++)
{
temp = data[i];
for (j=i-1; j>=0; j--)
{
if(data[j]>temp)
data[j+1]=data[j];
else
break;
}
data[j+1] = temp;
}
}
Код для сортировки вставками с использованием линейного поиска:
void InsertionSort (int A[], int n)
{
int i, temp;
for (i = 1; i < n; i++)
{
temp = A[i];
/* Binary Search */
int low = 0, high = i, k;
while (low<high)
{
int mid = (high + low) / 2;
if (temp <= A[mid])
high = mid;
else
low = mid+1;
}
for (k = i; k > high; k--)
A[k] = A[k - 1];
A[high] = temp;
}
}
Хотя количество сравнений с использованием двоичного поиска = O(nlogn) и количество сравнений с использованием линейного поиска = O(n^2) для среднего случая.
Где исходная сортировка вставки — это сортировка с линейным поиском, а модифицированная сортировка вставки — с двоичным поиском.