Алгоритм сортировки STL - PullRequest
1 голос
/ 13 ноября 2011

Я пытаюсь отсортировать массив чисел в порядке возрастания и не знаю, что не так с моим кодом (я совершенно новичок в векторах).Я должен сначала скопировать входной массив (данные) в вектор STL, затем применить алгоритм сортировки STL к вектору и, наконец, скопировать вектор обратно в массив.

void STLSort(int data[],int size)
{
vector<int> a1;
a1.reserve(size);
for(int i=0;i<size;i++)
    a1[i]=data[i];
sort(a1.begin(),a1.end());
for(int i=0;i<size;i++)
    data[i]=a1[i];
}

Спасибо.

Ответы [ 2 ]

4 голосов
/ 13 ноября 2011

Вы можете отсортировать диапазон напрямую:

void sort_me(int * arr, unsigned int size)
{
  std::sort(arr, arr + size);
}

int main()
{
  int a[] = { 3, 11, 7 };
  sort_me(a, sizeof(a)/sizeof(int));

  // or even just in-place:
  int b[] = { 12, -1, 88, 0 };
  std::sort(b, b + sizeof(b)/sizeof(int));
}

Еще больше модов: шаблон:

template <typename T, unsigned int N>
void sort_me_v2(T (&arr)[N])
{
  std::sort(arr, arr + N);
}

int main()
{
  int c[] = { -1, 2, -3, 4 };
  sort_me_v2(c);
}
2 голосов
/ 13 ноября 2011
a1.reserve(size);

Это выделяет место для предметов, но не меняет size() вектора.По сути, end() совпадает с begin(), поэтому вы сортируете пустое vector.Вы должны использовать

a1.resize(size);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...