I have a quicksort that I wrote here:
void swap(int& a, int& b);
int mid(int lo, int hi);
// My quicksort implementation
void sort(int vec[], int lo, int hi)
{
int mid;
if (hi > lo) {
int i = lo + 1;
int j = hi;
int p = mid(lo, hi);
swap(vec[lo], vec[p]);
mid = vec[lo];
while (i < j) {
if (vec[i] <= mid) {
i++;
} else {
while (i < --j && vec[j] >= mid);
swap(vec[i], vec[j]);
}
}
i++;
swap(vec[lo], vec[i]);
sort(vec, lo, i);
sort(vec, j, hi);
}
}
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
int mid(int lo, int hi)
{
return lo + ((hi - lo) / 2);
}
I tried compiling to an object file with g++ -g -c array.cpp -o array.o
I get this error:
array.cpp:24:14: error: called object type 'int' is not a function or function
pointer
int p = mid(lo, hi);
~~~^
1 error generated.
Everything looks correct. Can anyone help me figure out what is wrong?
Your local variable mid
is declared in the scope that is closer to the point of use, so it "shadows" the mid()
function; the compiler thinks that you are trying to "call" an integer, which is invalid. Rename the local variable to fix this problem:
int midpoint;
if (hi > lo) {
int i = lo + 1;
int j = hi;
int p = mid(lo, hi);
swap(vec[lo], vec[p]);
midpoint = vec[lo];
...
}
Note: you could also use ::mid(lo, hi)
instead of renaming the variable, but that would confuse the readers of your program.