У меня есть массив из 10 int и с использованием сортировки выбора. Я вычисляю, что для сортировки всего массива требуется около 45 сравнений, но я не уверен, сколько нужно сортировать по методу слияния по моим расчетам, требуется 12 сравнений .... я прав или не прав здесь?сравнение с использованием сортировки слияния и выбора сортировки
Заранее спасибо
вот метод слияния
static void merge(int[] first, int[] second, int[] a)
{
int iFirst = 0;
int iSecond = 0;
int i = 0;
//moving the smaller element into a
while(iFirst < first.length && iSecond < second.length)
{
if(first[iFirst] < second[iSecond])
{
a[i] = first[iFirst];
iFirst++;
}
else
{
a[i] = second[iSecond];
iSecond++;
}
i++;
}
counter += i;
//copying the remaning of the first array
while(iFirst < first.length)
{
a[i] = first[iFirst];
iFirst++; i++;
}
//copying the remaining of second array
while(iSecond < second.length)
{
a[i] = second[iSecond];
iSecond++; i++;
}
}
Что вы подразумеваете под наихудшим случаем, в конце вам все равно нужно сравнить все числа, не так ли? – miatech
Не обязательно. Если вы объедините '[1,2,3,4,5]' с '[6,7,8,9,10]', вам нужно только сравнить 6 с пятью элементами первого массива, после чего, больше никаких сравнений не требуется. Если самый большой элемент одного из отсортированных массивов (более короткий) для слияния меньше, чем самый маленький из других, это лучший случай. Таким образом, для слияния требуется что-либо от 'min {m, n}' до 'm + n-1'. Дерево в моем ответе дает наихудшие номера. –
ОК, вот что я делаю, я пытаюсь подсчитать сравнение алгоритма сортировки слияния с этими числами 45 62 98 89 47 59 72 82 45 18, и я получаю 26 сравнений, так как вы можете видеть, что мои номера на всем протяжении место (по порядку), они являются случайным числом (0-100), так как я смотрю на 10 чисел, я думаю, что это худший сценарий, или нет? – miatech