Я пытался заставить этот код компилироваться, но, похоже, он не хочет, чтобы функция секционирования работала. Очевидно, это связано с массивом, но я не могу понять, что это такое.
Редактировать: я использую std :: partition, а не оригинальную функцию раздела.
#include <ctime>
#include <string>
#include <algorithm>
#include <array>
#include <iostream>
using namespace std;
const int MAX_SIZE = 10000;
const int MIN_SIZE = 10;
Вот быстрая сортировка:
//quick sort
void quickSort(int arr[], int first, int last, int size)
{
if(last - first + 1< MIN_SIZE)
{
insertionSort(arr,size);
}
else
{
int pivotIndex = partition(arr, first, last);
quickSort(arr, first, pivotIndex-1,size);
quickSort(arr, pivotIndex+1,last,size);
}
}
Вот ошибка:
error: no matching function for call to 'partition(int*&, int&, int&)'
Спасибо всем, кто может это прояснить. Все, кроме функции раздела, кажется, работает нормально.
Я полагаю, вы сделали using namespace std;
выше этого кода. В этом случае, std::partition
алгоритм, разработанный для работы с контейнерами STL, а не с массивами в стиле C Попробуйте проверить по ссылке (например, Вот).
К сожалению, вам нужно либо найти / написать алгоритм разбиения, который работает с необработанными массивами, либо перейти с int arr[]
что-то вроде std::vector<int>
,
В противном случае, если partition
это действительно другая функция в вашем коде, пожалуйста, предоставьте ее.
Надеюсь, это поможет.
Других решений пока нет …