Найти ошибку в программе

Помогите найти ошибку в коде. Функция должна сортировать массив длины 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);
    }
}}

Ответы (0 шт):