Я создаю это, чтобы лучше понять алгоритмы сортировки и общие функции. Я реализовал базовый алгоритм сортировки вставки, и я пытаюсь заставить его работать с несколькими структурами данных (списки и массивы, по крайней мере).C++ generic insertion sort
Поскольку я могу получить доступ к таким спискам: list [N], чтобы получить значение, я думаю, что мне нужно использовать итераторы. Поэтому я пытаюсь преобразовать свое решение. Вот основная вставка рода алгоритм Я пытаюсь изменить:
int *insertionsort(int *a)
{
for (int i = 1; i<length(a); ++i)
{
int k = a[i];
int j = i-1;
{
while (j>=0 && a[j] > k)
{
a[j+1] = a[j--];
}
a[j+1] = k;
}
return a;
}
А вот то, что я до сих пор для общей версии:
template <class T>
T insertionsort(T a)
{
for (auto i = a.begin()+1; i<a.end(); ++i)
{
auto k = i;
auto j = i-1;
while (j>=a.begin() && *j>*k)
{
(j + 1) = j--;
}
(j + 1) = k;
}
return a;
}
Unfortunatley Я не могу показаться, чтобы получить это родовое функция для правильной сортировки. Я смотрел на это довольно долго, не повезло. Идеи?
У вас возникли ошибки? – 0x499602D2
Что случилось с 'strlen (a)'? Это совсем не так, как вы должны получить длину массива int; вам нужно передать длину массива. – user2357112
'(j + 1) = ничего' не имеет смысла. Вы имели в виду разыменовать итератор? – user2357112