Метод алгоритма сортировки векторной вставки C ++ - передать вектор в метод - PullRequest
2 голосов
/ 19 апреля 2011

Я смотрю повсюду, и какой бы алгоритм я ни нашел (если он есть) для вставки сортировки по вектору в c ++, он не будет работать, поэтому я предполагаю, что он как-то связан с моим кодом. Может ли кто-нибудь помочь мне найти способ, которым я могу передать вектор в метод в качестве аргумента, а затем выполнить сортировку вставки для него? В данный момент он ждет несколько секунд и показывает все несортированные значения: (

Код сортировки вставки

void insertionSort (vector<int> data, int n) 
{
int i, j, tmp;

 for (i=1; i<n; i++)
 {
     j=i;
     tmp=data[i];
     while (j>0 && tmp<data[j-1])
     {
           data[j]=data[j-1];
           j--;
     }
     data[j]=tmp;
 }

Важная часть кода

        cout << "insertion sort" << endl;
        system("pause");
        insertionSort(numberVectors, i);

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

спасибо

Ответы [ 2 ]

8 голосов
/ 19 апреля 2011

Ваша функция принимает аргумент по значению; это означает, что он получает копию . Вы напрасно сортируете копию.

Вместо этого измените ссылку на:

void insertionSort (vector<int>& data, int n) 
1 голос
/ 19 апреля 2011

Передайте ваш массив по ссылке, тогда изменения в функции будут отражены на нем

void insertionSort (vector<int> &data, int n) 
{
   ...
}
...