Я использую программу быстрой сортировки для работы с массивами любого типа, но у меня проблемы с памятью. Вот программа для справки:
#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 ++