int main(void) { int N; int *A; int i, j, val; scanf("%d",&N); A = (int *) malloc(sizeof(int)*N); for(i=0; i<N; i++){ scanf("%d",&A[i]); } struct timeval start, stop; double totaltime; gettimeofday(&start,NULL); insertionSort(A, N); gettimeofday(&stop,NULL); checkSorted(A,N); totaltime = ( stop.tv_sec * 1000000L + stop.tv_usec ) - ( start.tv_sec * 1000000L + start.tv_usec ); totaltime /= 1000; printf("Size = %d Time taken = %fms\n",N,totaltime); return 0; }
int main() { int i; int *in; int *out; int *tmp; SIZE=pow(2,LEVELS); srand(SEED); printf("Testing array of size %d\n",SIZE); in = (int*)malloc(SIZE*sizeof(int)); out = (int*)malloc(SIZE*sizeof(int)); for (i=0; i<SIZE; i++) { in[i]=random() % MAXVAL; } // printf("in: "); // printInt(in); for (i=0; i<SIZE; i++) { out[i] = in[i]; } mergeSort(in, out); // printf("out: "); // printInt(out); checkSorted(out); free(in); free(out); return 0; }
/* This function can be used only when the adjacency lists for * each vertex are sorted! Beware! **/ Matrix* add(Matrix* M0, Matrix* M1) { if ( checkSorted(M0->nvtxs, M0->xadj, M0->adjncy) == 0 || checkSorted(M1->nvtxs, M1->xadj, M1->adjncy) == 0) { printf("Yikes! Input to matrix add is not sorted!\n"); fflush(stdout); return NULL; } Matrix* ret; int i,j,k; long ret_size=(M0->nnz > M1->nnz)? M0->nnz: M1->nnz ; int init_ret_size = ret_size; wgttype t; ret=allocMatrix(M0->nvtxs, init_ret_size ,0,0,0); ret->xadj[0]=0; for(i=0;i<M0->nvtxs;i++) { int l=ret->xadj[i]; for(j=M0->xadj[i],k=M1->xadj[i]; j<M0->xadj[i+1] && k<M1->xadj[i+1];) { wgttype a=M0->adjwgt[j],b=M1->adjwgt[k]; if ( l+2 >= ret_size ) { ret_size+=ret_size; ret->adjncy=(idxtype*)realloc(ret->adjncy, (ret_size)*sizeof(idxtype)); ret->adjwgt=(wgttype*)realloc(ret->adjwgt, (ret_size)*sizeof(wgttype)); if ( ret->adjncy == NULL || ret->adjwgt == NULL ) { printf("Could not allocate"); printf(" %ld bytes!\n",ret_size*sizeof(idxtype)); abort(); } } if (M0->adjncy[j]==M1->adjncy[k]) { ret->adjwgt[l]=a+b; ret->adjncy[l]=M0->adjncy[j]; j++;k++;l++; } else { if ( M0->adjncy[j] < M1->adjncy[k] ) { ret->adjwgt[l]=a; ret->adjncy[l]=M0->adjncy[j]; j++;l++; } else { ret->adjwgt[l]=b; ret->adjncy[l]=M1->adjncy[k]; k++;l++; } } } if ( l+(M0->xadj[i+1]-j)+(M1->xadj[i+1]-k) >= ret_size ) { ret_size+=ret_size; ret->adjncy=(idxtype*)realloc(ret->adjncy, (ret_size)*sizeof(idxtype)); ret->adjwgt=(wgttype*)realloc(ret->adjwgt, (ret_size)*sizeof(wgttype)); if ( ret->adjncy == NULL || ret->adjwgt == NULL ) { printf("Could not allocate"); printf(" %ld bytes!\n",ret_size*sizeof(idxtype)); abort(); } } for(;j<M0->xadj[i+1];j++) { ret->adjncy[l]=M0->adjncy[j]; ret->adjwgt[l++]=M0->adjwgt[j]; } for(;k<M1->xadj[i+1];k++) { ret->adjncy[l]=M1->adjncy[k]; ret->adjwgt[l++]=M1->adjwgt[k]; } ret->xadj[i+1]=l; } ret->nnz=ret->xadj[ret->nvtxs]; return ret; }