/* counting sort with permutation reindexing - sergey voronin, 2019 */ #include #include #include // struct to store inds of vals struct val_inds { int val; int num_inds; int *inds; }; void counting_sort(int *a, int *inds, const size_t len, const int maxp1){ int *b, *counts, *counts2, i,j,tot, oldcnt,ind=0, maxrepeats = len; b = (int*) calloc(len,sizeof(int)); counts = (int*) calloc(maxp1,sizeof(int)); counts2 = (int*) calloc(maxp1,sizeof(int)); struct val_inds* valis = malloc(maxp1*sizeof(struct val_inds)); for(i=0; i