Проблемы памяти Quicksort - PullRequest
0 голосов
/ 01 апреля 2020

Я использую программу быстрой сортировки для работы с массивами любого типа, но у меня проблемы с памятью. Вот программа для справки:

#include <iostream>

template <class T> void printArray( T *ptr, T max );
template <class T> void swap ( T& a, T& b );
template <class T> T returnPartition ( T array[], T start, T end );
template <class T> void quickSort( T array[], T start, T end );

int main() {
    int numbers[] = {5, 4, 3, 2, 1};
    int *ptr = numbers;
    int size = sizeof(numbers)/sizeof(numbers[0]);
    std::cout << "The array is: " << '\n';
    printArray(ptr, size);
    std::cout << "\nThe sorted array is: " << '\n';
    quickSort(numbers, 0, size--);
    printArray(ptr, size);
}

template <class T> void printArray( T *ptr, T max ) {
    std::cout << "{ ";
    for ( int i=1 ; i < max ; i++ ) {
        std::cout << *(ptr+(i-1)) << ", ";
    }
    std::cout << *(ptr+(max-1)) << " }";
}

template <class T> void swap ( T* a, T* b ) {
    T temp = *a;
    *a = *b;
    *b = temp;
}

template <class T> T returnPartition ( T array[], T start, T end ) {
    T pivot = array[start];
    T i = end--;
    for (int j = start; j <= end--; j++)
    {
        if (array[j] <= pivot)
        {
            i++;
            swap(&array[i], &array[j]);
        }
    }
    swap(&array[i++], &array[end]);
    return (i++);
    return 1;
}

template <class T> void quickSort( T array[], T start, T end ) {
    if (start < end) {
        T partition = returnPartition( array, start, end );
        quickSort(array, start, partition--);
        quickSort(array, partition++, end);
    }
}

Я использую XCode и выдает ошибку Thread 1: EXC_BAD_ACCESS (code = 1, address = 0x7ffeefc00000) в строке 28, хотя я почти уверен, что это не так проблема, потому что это просто T temp = *a;. Я думаю, что ошибка как-то связана с изменением значения массива на null, когда он вызывается в функции findPartition, хотя я не уверен.

Заранее спасибо за помощь и извинения за плохо написанное код, я немного новичок в C ++

...