int main() { char *original[] = { "university", "of", "maryland", "college", "park", "computer", "science", "introduction", "to", "c", "programming" }; char *sorted[] = { "c", "college", "computer", "introduction", "maryland", "of", "park", "programming", "science", "to", "university" }; int i; mt_mergesort(&original[0], sizeof(original)/sizeof(*original), sizeof(*original), cmpstringp,2); for (i = 0; i < sizeof(original)/sizeof(*original); i++) { if (strcmp(original[i], sorted[i]) == 0) { printf("CORRECT: "); } else { printf("INCORRECT: "); } printf("After sorting, arr[%d] == %s, should be %s\n", i, original[i], sorted[i]); } return 0; }
int main() { int original[10001]; int sorted[10001]; int i; Compare_fn my_cmp = cmp; srand(216); for (i = 0; i < 10001; i++) { original[i] = sorted[i] = rand() / 1000000; } qsort(&sorted[0], sizeof(sorted)/sizeof(*sorted), sizeof(*sorted), my_cmp); mt_mergesort(&original[0], sizeof(original)/sizeof(*original), sizeof(*original), my_cmp, 2); for (i = 0; i < sizeof(original)/sizeof(*original); i++) { if (original[i] == sorted[i]) { printf("CORRECT: "); } else { printf("INCORRECT: "); } printf("After sorting, arr[%d] == %d, should be %d\n", i, original[i], sorted[i]); } return 0; }
int main() { long original[] = {9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9}; long sorted[] = {9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9}; int i; mt_mergesort(original, sizeof(original)/sizeof(*original), sizeof(*original), cmp, 3); for (i = 0; i < sizeof(original)/sizeof(*original); i++) { if (original[i] == sorted[i]) { printf("CORRECT: "); } else { printf("INCORRECT: "); } printf("After sorting, arr[%d] == %ld, should be %ld\n", i, original[i], sorted[i]); } return 0; }
int main(int argc, char *argv[]) { int num, seed, up_bound, i, j, *arr, *temp, z; struct rusage usage1, usage2; struct timeval wall1, wall2; if (argc < 4) { printf("need three args to run this mergetest\n"); return 1; } num = atoi(argv[1]); z = atoi(argv[2]); seed = atoi(argv[3]); up_bound = atoi(argv[4]); arr = malloc(sizeof(int)*num); if (arr == NULL) { fprintf(stderr, "malloc failed\n"); return -1; } temp = malloc(sizeof(int)*num); if (temp == NULL) { fprintf(stderr, "second malloc failed\n"); return -1; } srand(seed); for (i = 0; i < num; i++) { arr[i] = rand()%up_bound; } for (i = 0; i <= 5; i++) { for (j = 0; j < num; j++) { temp[j] = arr[j]; } printf("%d threads: ", i); gettimeofday(&wall1, NULL); getrusage(RUSAGE_SELF, &usage1); if (!i) { st_mergesort(temp, num, sizeof(int), cmp); } else { mt_mergesort(temp, num, z, sizeof(int), cmp, i); } gettimeofday(&wall2, NULL); getrusage(RUSAGE_SELF, &usage2); wall2.tv_sec -= wall1.tv_sec; if ((wall2.tv_usec -= wall1.tv_usec) < 0) { wall2.tv_usec += 1000000; wall2.tv_sec--; } usage2.ru_utime.tv_sec -= usage1.ru_utime.tv_sec; if ((usage2.ru_utime.tv_usec -= usage1.ru_utime.tv_usec) < 0) { usage2.ru_utime.tv_usec += 1000000; usage2.ru_utime.tv_sec--; } usage2.ru_stime.tv_sec -= usage1.ru_stime.tv_sec; if ((usage2.ru_stime.tv_usec -= usage1.ru_stime.tv_usec) < 0) { usage2.ru_stime.tv_usec += 1000000; usage2.ru_stime.tv_sec--; } printf("%d.%06ds wall; %d.%06ds user; %d.%06ds sys\n", (int) wall2.tv_sec, (int) wall2.tv_usec, (int) usage2.ru_utime.tv_sec, (int) usage2.ru_utime.tv_usec, (int) usage2.ru_stime.tv_sec, (int) usage2.ru_stime.tv_usec); } free(arr); free(temp); return 0; }