fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct Resource
  6. {
  7. int low;
  8. int length;
  9. int *data;
  10. } Resource;
  11.  
  12. void Swap(int *first, int *second)
  13. {
  14. int tmp = *first;
  15. *first = *second;
  16. *second = tmp;
  17. }
  18.  
  19. void SortQuick(int **data, int *low, int *high)
  20. {
  21. int i = *low,
  22. j = *high,
  23. x = (*data)[(*low + *high) / 2];
  24.  
  25. do
  26. {
  27. while((*data)[i] < x) i++;
  28. while((*data)[j] > x) j--;
  29.  
  30. if(i <= j)
  31. {
  32. Swap(&(*data)[i], &(*data)[j]);
  33. i++;
  34. j--;
  35. }
  36.  
  37. } while(i <= j);
  38.  
  39. if(i < *high) SortQuick(data, &i, high);
  40. if(*low < j) SortQuick(data, low, &j);
  41. }
  42.  
  43. void ArrayPrint(int **data, int *array_length)
  44. {
  45. for(int i = 0; i < *array_length; i++)
  46. {
  47. printf("[%i]: %i\r\n", i, (*data)[i]);
  48. }
  49. }
  50.  
  51. void ArrayInit(int **data, int *array_length)
  52. {
  53. (*data) = (int*)malloc(sizeof(int) * *array_length);
  54.  
  55. for(int i = 0; i < *array_length; i++)
  56. {
  57. (*data)[i] = rand();
  58. }
  59. }
  60.  
  61. int GlobalInit(Resource **data_resource)
  62. {
  63. srand((unsigned int)rand());
  64.  
  65. *data_resource = (Resource*)malloc(sizeof(Resource));
  66. (*data_resource)->low = 0;
  67. (*data_resource)->length = rand();
  68.  
  69. ArrayInit(&(*data_resource)->data, &(*data_resource)->length);
  70.  
  71. return (*data_resource)->length;
  72. }
  73.  
  74. void BenchmarkTest(Resource **data_resource)
  75. {
  76. ArrayPrint(&(*data_resource)->data, &(*data_resource)->length);
  77. SortQuick(&(*data_resource)->data, &(*data_resource)->low, &(*data_resource)->length - 1);
  78. ArrayPrint(&(*data_resource)->data, &(*data_resource)->length);
  79. }
  80.  
  81. int main(void)
  82. {
  83. Resource *data_resource = NULL;
  84.  
  85. GlobalInit(&data_resource);
  86. BenchmarkTest(&data_resource);
  87.  
  88. return 0;
  89. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty