Неопределённость элементов массива при реализации метода 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;
}