О сортировке пузырьков vs сортировка слиянием

Это вопрос интервью, которое я недавно нашел в Интернете:

Если вы собираетесь реализовать функцию, которая принимает целочисленный массив в качестве входных данных и возвращает максимум, вы бы использовали сортировку пузырьков или сортировку слиянием для реализации этой функции? Что делать, если размер массива меньше 1000? Что делать, если он больше 1000?

вот как я об этом думаю:

во-первых, очень странно использовать сортировку для реализации вышеуказанной функции. Ты можешь просто уйти. через массив один раз и найти max one. Во - вторых, если нужно сделать выбор между ними, то сортировка пузырьков лучше-вам не нужно реализовывать всю процедуру сортировки пузырьков, а нужно только сделать первый проход. Это лучше, чем объединить сортировку как во времени, так и в пространстве.

есть ли ошибки в моем ответе? Я что-нибудь пропустил?

6 ответов


Это вопрос с подвохом. Если вы просто хотите максимум, (или действительно, kth значение для любого k, которое включает в себя поиск медианы), есть совершенно хороший . Сортировка-пустая трата времени. Вот что они хотят услышать.

Как вы говорите, алгоритм максимума действительно тривиален. Чтобы ace такой вопрос, вы должны иметь готовый алгоритм быстрого выбора, а также иметь возможность предложить структуру данных кучи, если вам нужно иметь возможность мутировать список значений и всегда иметь возможность производить максимально быстро.


Я просто погуглил алгоритмы. Пузырьковая сортировка выигрывает в обеих ситуациях из-за наибольшего преимущества только того, чтобы пройти через нее один раз. Сортировка слиянием не может сократить какие-либо сокращения только для вычисления наибольшего числа. Merge принимает длину списка, находит середину, а затем все числа ниже середины сравниваются слева, а все выше сравниваются справа; в противоположность созданию уникальных пар для сравнения. Значение для каждого числа, оставленного в массиве, равно числу необходимо провести сравнение. В дополнение к этому каждое число сравнивается дважды, поэтому самые низкие числа массива, скорее всего, будут устранены в обоих их сравнениях. Значение только одного меньшего числа в массиве после выполнения двух сравнений во многих ситуациях. Пузырь будет доминировать


во-первых, я согласен со всем, что вы сказали, но, возможно, он спрашивает о знании временной сложности алгоритмов и о том, как размер входного сигнала является большим фактором, в котором будет быстрее всего.

сортировка пузырьком составляет O(n2) и сортировка слияния -O(nlogn). Таким образом, на небольшом наборе это не будет отличаться, но на большом количестве пузырьков данных сортировка будет намного медленнее.


за исключением максимальной части, сортировка пузырьков медленнее асимптотически, но она имеет большое преимущество для малых n в том, что он не требует слияния/создание новых массивов. В некоторых реализациях это может сделать его быстрее в реальном времени.


требуется только один проход, в худшем случае , чтобы найти максимум u, просто нужно пересечь весь массив, поэтому пузырь будет лучше ..


Merge sort легко для компьютера сортировать элементы, и для сортировки требуется меньше времени, чем для сортировки пузырьков. Лучший случай с сортировкой слияния -n*log2n и в худшем случае составляет n*log2n. С bubble sort лучшим случаем является O(n) и в худшем случае составляет O(n2).