You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.5KB

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <bits/time.h>
  4. #include <stdlib.h>
  5. #include "sorts.h"
  6. void init_arr(double* arr, size_t n) {
  7. for (size_t i = 0; i < n; i++ ){
  8. arr[i] = (double) (rand() % (2 << 10)) / 42;
  9. }
  10. }
  11. void do_test(size_t n) {
  12. double arr[n];
  13. long start = clock() * 1000 / CLOCKS_PER_SEC;
  14. long elapsed;
  15. size_t sorts = 0;
  16. srand(time(0));
  17. do {
  18. init_arr(arr, n);
  19. quicksort(arr, n);
  20. elapsed = clock() * 1000 / CLOCKS_PER_SEC - start;
  21. sorts++;
  22. } while (elapsed < 2500);
  23. printf("Quicksort:\n%lu sorts done in %ld ms, avg: %.5f ms\n", sorts, elapsed, (double) elapsed / sorts);
  24. start = clock() * 1000 / CLOCKS_PER_SEC;
  25. sorts = 0;
  26. do {
  27. init_arr(arr, n);
  28. shellsort(arr, n);
  29. elapsed = clock() * 1000 / CLOCKS_PER_SEC - start;
  30. sorts++;
  31. } while (elapsed < 2500);
  32. printf("Shellsort:\n%lu sorts done in %ld ms, avg: %.5f ms\n", sorts, elapsed, (double) elapsed / sorts);
  33. start = clock() * 1000 / CLOCKS_PER_SEC;
  34. sorts = 0;
  35. do {
  36. init_arr(arr, n);
  37. selectionsort(arr, n);
  38. elapsed = clock() * 1000 / CLOCKS_PER_SEC - start;
  39. sorts++;
  40. } while (elapsed < 2500);
  41. printf("Selection sort:\n%lu sorts done in %ld ms, avg: %.5f ms\n", sorts, elapsed, (double) elapsed / sorts);
  42. }
  43. int main() {
  44. printf("Doing test for n = 2 << 9\n");
  45. do_test(2 << 9);
  46. printf("\n");
  47. printf("Doing test for n = 2 << 12\n");
  48. do_test(2 << 12);
  49. printf("\n");
  50. printf("Doing test for n = 2 << 15\n");
  51. do_test(2 << 15);
  52. printf("\n");
  53. }