Guest User

Untitled

a guest
Feb 20th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. #include<sys/time.h>
  5. #include<pthread.h>
  6.  
  7. typedef struct tab {
  8. int * t;
  9. int taille;
  10. } tab;
  11.  
  12. typedef struct quickarg {
  13. tab * tab;
  14. int premier;
  15. int dernier;
  16. } quickarg;
  17.  
  18.  
  19. void afficher_tab (tab * tab);
  20. int quicksort_partitionner (tab * tab, int premier, int dernier, int pivot);
  21. void echanger(tab * tab, int i, int j);
  22. void quicksort (quickarg qa);
  23.  
  24.  
  25.  
  26.  
  27. int main () {
  28. tab * tab;
  29. tab = malloc (sizeof(tab));
  30. tab->taille = 6;
  31. tab->t = malloc(tab->taille * sizeof(int));
  32. for (int i = 0; i < tab->taille; i++){
  33. tab->t[i] = rand() % 100;
  34. }
  35.  
  36. quickarg qa;
  37. qa.tab = tab;
  38. qa.premier = 0;
  39. qa.dernier = tab->taille - 1;
  40.  
  41. afficher_tab(tab);
  42. quicksort(qa);
  43. afficher_tab(tab);
  44.  
  45. return EXIT_SUCCESS;
  46. }
  47.  
  48.  
  49. void quicksort (quickarg qa) {
  50. printf("allo quoi\n");
  51. pthread_t thread1, thread2;
  52. int pivot = qa.premier;
  53. int dernier = qa.dernier;
  54.  
  55. if (qa.premier < qa.dernier) {
  56. pivot = quicksort_partitionner(qa.tab, qa.premier, qa.dernier, pivot);
  57.  
  58. qa.dernier = pivot - 1;
  59. pthread_create (&thread1, NULL, (void *) &quicksort, (void *) &qa);
  60. qa.premier = pivot + 1;
  61. qa.dernier = dernier;
  62. pthread_create (&thread2, NULL, (void *) &quicksort, (void *) &qa);
  63.  
  64. pthread_join(thread1, NULL);
  65. pthread_join(thread2, NULL);
  66. }
  67. }
  68.  
  69. int quicksort_partitionner (tab * tab, int premier, int dernier, int pivot) {
  70. int j = premier;
  71. echanger(tab, pivot, dernier);
  72.  
  73. for (int i = premier; i < dernier; i++){
  74. if (tab->t[i] < tab->t[dernier]) {
  75. echanger(tab, i, j);
  76. j++;
  77. }
  78. }
  79.  
  80. echanger(tab, dernier, j);
  81. afficher_tab(tab);
  82. return j;
  83. }
  84.  
  85. void afficher_tab (tab * tab) {
  86. for (int i = 0; i < tab->taille; i++){
  87. printf("%d ", tab->t[i]);
  88. }
  89. printf("\n");
  90. }
  91.  
  92. void echanger(tab * tab, int i, int j) {
  93. int k = tab->t[i];
  94. tab->t[i] = tab->t[j];
  95. tab->t[j] = k;
  96. }
Add Comment
Please, Sign In to add comment