Неопределённость элементов массива при реализации метода QuickSort

Пытаюсь реализовать функцию QuickSort, чтобы при каждой перестановке элементов функцией swap() новый массив выводился в консоль, но столкнулся с неопределённым поведением элементов массива и не могу найти причину этому.

#include <stdio.h>
#include <stdlib.h>

void printArray(int array[], int size){
    for (int j = 1; j <= size; j++){
        printf("%3d", j);
    }
    printf("\n");
    for (int i = 0; i < size; i++){
        printf("%3d", array[i]);
    }
    printf("\n\n");
}


void swap(int* x, int* y){
    int temp = *x;
    *x = *y;
    *y = temp;
}


void QuickSort(int *array, int size, int length){
    //Указатели в начало и в конец массива
    int start = 0;
    int end = size - 1;

    //Центральный элемент массива
    int mid = array[size / 2];

    //Делим массив
    do {
        //Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
        //В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
        while(array[start] < mid) {
            start++;
        }
        //В правой части пропускаем элементы, которые больше центрального
        while(array[end] > mid) {
            end--;
        }

        //Меняем элементы местами
        if (start <= end) {
            swap(&array[start], &array[end]);
            start++;
            end--;
            printArray(array, length);
            
        }
    } while (start <= end);


    //Рекурсивные вызовы, если осталось, что сортировать
    if(end > 0) {
        //"Левый кусок"
        QuickSort(array, end + 1, length);
    }
    if (start < size) {
        //"Првый кусок"
        QuickSort(&array[start], size - start, length);
    }
}


int main(){
    int n; scanf("%d", &n);
    int length = n;
    int* array = (int*) malloc(sizeof(int) * n);

    for (int j = 0; j < n; j++){
        scanf("%d", &array[j]);
    }

    printArray(array, n);

    QuickSort(array, n, length);

    printArray(array, n);

    return 0;
}

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