Ваша функция никогда не завершится.
Он будет продолжать вызывать себя до тех пор, пока стек вызовов не заполнится и не вызовет исключение переполнения стека.
Компилятор должен сгенерировать предупреждение для этого:
warning C4717: 'myQuickSort' : recursive on all control paths, function will cause runtime stack overflow
Вам нужно условие выхода, что-то вроде:
void myQuickSort(int list[],int head, int tail)
{
//exit condition, or else the function will always call itself
if ( head >= tail )
return;
/**
...
*/
myQuickSort(list, m, head-1);
myQuickSort(list, head+1, n);
}
Кроме того, убедитесь, что вы вызываете функцию как:
int num[5] = {1,4,2,3,5};
myQuickSort(num,0,4);
конечный параметр должен быть на 1 меньше длины массива, поскольку массивы C ++ основаны на 0.
Вам также нужна дополнительная проверка в циклах while:
while( head < tail && list[head] < key ) // see if head reached the end
{
++head;
}
while( head < tail && list[tail] >= key )
{
--tail;
}
или вы можете передать конец массива.