2015-11-18 3 views
-1

Так что я считаю, что у меня есть метод quicksort, построенный правильно, но когда я вызываю его в своей основной функции, у меня возникает ошибка, в которой я не понимаю, что делать. Вот мой метод быстрой сортировки:Вызов для ошибки quickSort C++

void quickSort(vector<int> & a, int left, int right) { 
    if (left + 10 <= right) { 
     const int & pivot = median3(a, left, right); 

     int i = left, j = right -1; 
     for (; ;){ 
      while(a [++i] < pivot){} 
      while(pivot < a[--j]){} 
      if(i < j) 
       swap(a[i], a[j]); 
      else 
       break; 
     } 
     swap(a[i], a[right-1]); 

     quickSort(a,left,i-1); 
     quickSort(a,i+1,right); 
    } 
} 

А вот моя главная функция

int main() { 
    srand (time(NULL)); 
    vector<vector<int> > vectorList; 

    for (unsigned int j = 0; j < 8; j++) { 
     vector<int> tmp(100*pow(2,j)); 

     for (unsigned int l = 0; l<tmp.size(); l++) 
      tmp[l] = (rand() % 20000); 

     vectorList.push_back(tmp); 
    } 
    for (unsigned int y = 0; y != vectorList[0].size(); y++){ 
     cout << vectorList[0][y] << endl; 
    } 
    cout << vectorList[0].size() << endl; 
    cout << quickSort(vectorList[0], 0, vectorList[0].size()-1) << endl; 
    return 0; 

} 

Я делаю вызов для быстрой сортировки на второй линии от дна, и я получаю ошибку говоря: no match for 'operator<<' in std::cout << quickSort((* & vectorList.std""vector<blahblahblah

+3

'quickSort' возвращает' void' (то есть ничего вообще). Что вы ожидаете от этой линии? – Sneftel

+0

Я вижу это сейчас, но зачем мне это нужно? Я решил отсортировать первый вектор в векторе, который был бы quicksort (vectorList [0] [0], но это, похоже, не так – BondyeLwa

ответ

0

Вы можете:

quickSort(vectorList[0], 0, vectorList[0].size()-1); 
std::copy(vectorList[0].begin(), vectorList[0].end(), ostream_iterator<int>(cout, ", ")); 

Кроме того, как и другие указывали, состояние if (left + 10 <= right) - ошибка.

+0

Я получаю то же разрешение с вашим ответом, сообщение об ошибке «error: no match для 'operator <<' in 'std :: cout << quickSort ((* & vectorList.std :: vector <_Tp, _Alloc> :: operator [] , std :: allocator > > (0u)), 0, ((int) ((& vectorList.std :: vector <_Tp, _Alloc> :: operator [] , std :: allocator >> (0u)) -> std :: vector <_Tp, _Alloc> :: size >() + 4294967295u))) '| " – BondyeLwa

+1

это устраняет проблему с печатью, см. [здесь] (http: //coliru.stacked- crooked.com/a/b48e6ad235fa7662), но есть и другая проблема: 'if (left + 10 <= right) {', если это ложь, n o сортировка выполняется на всех – sp2danny

+0

@BondyeLwa, потому что вы все еще пытаетесь вывести функцию 'void'. Вместо этого используйте мой код. –