есть 3 основных различия между всеми этими алгоритмами:
- сохранение порядка (стабильный / неустановленный)
- порядок, в котором различные объекты сравниваются друг с другом (или сводной)
- порядок, в котором меняются различные объекты
, чтобы проверить сохранение порядка, вам нужно отсортировать объекты с одним свойством сортировки и вторым, чтобы различать guish их, например:
class item {
int sortid;
string name;
compareTo(item) -> return compare(this.sortid, item.sortid); note that name is not used
}
поэтому, предоставляя массив, который имеет неуникальный сорт, но разные имена, вы можете проверить алгоритмы на стабильность, обратите внимание - вам нужно использовать несколько входов, чтобы увидеть стабильность, как даже не -стабильные могут возвращать стабильный порядок:
- слияние - стабильно
- куча - не стабильно
- быстро - не стабильно
отличается реализация быстрых сортировок сначала попытается переместить объекты меньше, чтобы повернуть влево и больше вправо, поэтому, если вы обнаружите, что ваши элементы сравниваются с первым элементом - это первая реализация сводки, я f с серединой - это вторая реализация быстрой сортировки
, для реализации которой вам нужно передать объекты с пользовательским сравнением, которое проверит, с каким элементом они сравниваются, и они знают, что можно использовать в качестве сводной, поэтому первое сравнение даст вам ответ, какой сводный элемент фактически используется каким методом сортировки
, в этот момент будет ясно, какой из них является кучей, но если у вас есть возможность отслеживать перестановки элементов, вы также можете обнаружить кучу, так как он начинает помещать самые маленькие / самые большие элементы первым