2017-05-25 115 views
-2

我一直试图让这个代码编译,但它似乎并不希望分区功能工作。显然这与数组有关,但我无法弄清楚它是什么。快速排序分区不编译

编辑:我使用std ::分区,而不是原始分区函数。

#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&)' 

由于任何人谁可以清除这件事。除了分区功能以外的所有东西似乎都能正常工作。

+0

编译器错误不是关于数组。这是关于'分区'功能本身。它甚至没有被调用,它只是编译器不能理解你试图调用的函数。 – iehrlich

回答

2

我假设你已经完成了此代码上方的using namespace std;。在这种情况下,std::partition是设计用于处理STL容器而不是原始C风格数组的算法。考虑检查参考(例如,here)。

不幸的是,您需要查找/编写与原始数组一起工作的分区算法,或者从int arr[]迁移到std::vector<int>之类的东西。

否则,如果partition确实是您的代码中的另一个函数,请提供它。

希望有所帮助。

+0

谢谢,我会尝试这两个。 –

+0

@BenPerkins也看到了答案的最新编辑,因为它到目前为止只是一个猜谜游戏... – iehrlich

+0

我使用std :: partition,我应该包含更多。 –