Найти ошибку в программе
Помогите найти ошибку в коде. Функция должна сортировать массив длины n по возрастанию. Однако делает это она как-то криво, не всегда получается нужный результат.
void swap(int*a, int*b){
int c = *a;
*a=*b;
*b=c;}
void quicksort(int *a, int n) {
int i=0;
int j=n-1;
if(j==1){
if(a[j-1] > a[j]){
swap(&a[j-1], &a[j]);}}
else{
int mid = a[j/2];
do{
while(a[i] < mid) {
i++;
}
while(a[j] > mid) {
j--;
}
if (i <= j) {
swap(&a[i], &a[j]);}
i++;
j--;
}while (i <= j);
if(j > 0) {
quicksort(a, j);
}
if (i < n) {
quicksort(&a[i], n-i);
}
}}