Я пытаюсь реализовать сортировку сегментов, используя векторную функцию изменяемого размера. Вектор работает нормально, но я получаю ошибку сегментации каждый раз, когда пытаюсь запустить функцию сортировки. Может кто-нибудь помочь мне исправить это? Заметки о коде: K = количество сегментов в этом случае 10. find_max и find_min делают именно то, что вы ожидаете. vector_int_construct инициализирует массив, а vector_int_push_back помещает целые числа в конец массива. vector_int_sort просто вызывает созданную мной функцию merge_sort, которая также прекрасно работает сама по себе.
typedef struct {
size_t size;
size_t maxsize;
int* array;
}
vector_int_t;
void bucket_sort( int* a, size_t size )
{
int min = find_min( a, size );
int max = find_max( a, size );
size_t range = (( max - min ) / K );
vector_int_t buckets[K];
for( size_t i = 0; i < K; i++ ) {
vector_int_construct( &buckets[i] );
for( size_t j = 0; j < range; j++ ) {
vector_int_push_back( &buckets[i], a[j] );
}
}
for( size_t i = 0; i < K; i++ ) {
vector_int_sort( &buckets[i] );
}
size_t cnt = 0;
while( cnt != size ) {
for( size_t i = 0; i < K; i++ ) {
for( size_t j = 0; j < vector_int_size( &buckets[i] ); j++ ) {
a[cnt] = buckets[i].array[j];
cnt++;
}
}
}
}
int main()
{
size_t size = 4;
int a[] = { 19, 95, 4, 23 };
// Print out array before
printf( "Before sorting: " );
ece2400_print_array( a, size );
// Call sort
bucket_sort( a, size );
// Print out array after
printf( "After sorting: " );
ece2400_print_array( a, size );
return 0;
}