void ParallelQSortInts(idxtype *a, idxtype *b, int start, int end) { int q; if ( start < end ) { q=ParallelRandomPartitionInts(a,b,start,end); ParallelQSortInts(a,b,start,q-1); ParallelQSortInts(a,b,q+1,end); } }
void getPermutedGraph(idxtype* perm, idxtype* revPerm, int nvtxs, int nedges, idxtype* xadj, idxtype* adjncy, idxtype* adjwgt, idxtype** p_xadj, idxtype** p_adjncy, idxtype** p_adjwgt) { *p_xadj = idxmalloc(nvtxs+1, "getPermutedGraph:p_xadj"); *p_adjncy = idxmalloc(nedges, "getPermutedGraph:p_adjncy"); if ( adjwgt != NULL ) *p_adjwgt = idxmalloc(nedges, "getPermutedGraph:p_adjwgt"); else *p_adjwgt = NULL; int i; (*p_xadj)[0]=0; for ( i=0; i<nvtxs; i++ ) { int orgI = revPerm[i]; int j; (*p_xadj)[i+1] = (*p_xadj)[i] + ( xadj[orgI+1] - xadj[orgI] ); for ( j=(*p_xadj)[i]; j<(*p_xadj)[i+1]; j++ ) { int orgJ = xadj[orgI] + j - (*p_xadj)[i]; (*p_adjncy)[j] = perm[adjncy[orgJ]]; if ( adjwgt != NULL ) (*p_adjwgt)[j] = adjwgt[orgJ]; } if ( adjwgt != NULL ) { ParallelQSortInts( (*p_adjncy), (*p_adjwgt), (*p_xadj)[i], (*p_xadj)[i+1]-1 ); } else { iidxsort( (*p_xadj)[i+1]-(*p_xadj)[i], (*p_adjncy)+(*p_xadj)[i] ); } } return; }