Ошибка сортировки ковша - PullRequest
       110

Ошибка сортировки ковша

0 голосов
/ 28 октября 2019

Я пытаюсь реализовать сортировку сегментов, используя векторную функцию изменяемого размера. Вектор работает нормально, но я получаю ошибку сегментации каждый раз, когда пытаюсь запустить функцию сортировки. Может кто-нибудь помочь мне исправить это? Заметки о коде: 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;
}
...