Я пытаюсь запустить основную сортировку, разбивая цифры на 8, но числа и сортируя его.Это код, который я написал до сих пор.Я застреваю с ошибкой сегментации, и я не уверен, почему.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
// #include <omp.h>
#include "sort.h"
#include "edgelist.h"
void radixSortEdgesBySource(struct Edge *edges_sorted, struct Edge *edges, int numVertices, int numEdges) {
int i,j;
int *vertex_cnt = (int *) malloc (256 * sizeof(int));
for (j = 0; j < 4; ++j) //Radix Sort for d digits
{
//int *vertex_cnt = (int *) malloc ((1<<8) * sizeof(int));
for(i = 0; i < 256; ++i)
{
vertex_cnt[i] = 0;
}
for(i = 0; i < numEdges; ++i)
{
vertex_cnt[(edges[i].src >> 8*j) & ((1 << 8) - 1)]++;
}
for(i = 1; i < 257; ++i)
{
vertex_cnt[i] += vertex_cnt[i - 1];
}
for(i = numEdges - 1; i >= 0; --i) {
//printf("KEY: %d\n", (edges[i].src >> 8*j) & ((1 << 8) - 1));
edges_sorted[--vertex_cnt[(edges[i].src >> 8*j) & ((1 << 8) - 1)]] = edges[i];
}
edges = edges_sorted;
//free(vertex_cnt);
}
// free(vertex_cnt);
}
Значения edges
и edges_sorted
определены как:
struct Edge{
int src; // id of a source vertex
int dest; // id of a destination vertex
};
struct Edge * newEdgeArray(int numOfEdges);
Может кто-нибудь помочь мне с объяснением ошибки сегментации?