Advertisement
Guest User

Untitled

a guest
Sep 28th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. // uloha-2-1.c -- Tyzden 2 - Uloha 1
  2. // Richard Kubik, 26.9.2016 12:25:33
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <malloc.h>
  7.  
  8.  
  9. void vymen(int *a, int *b) {
  10. int temp;
  11. temp = *a;
  12. *a = *b;
  13. *b = temp;
  14. }
  15.  
  16. int tried(int *a, int zac, int koniec)
  17. {
  18.  
  19. int velkost=(koniec-zac +1);
  20. int pIndex=rand() %velkost;
  21. vymen(a+zac+pIndex,a+(koniec));
  22. int pivot=a[koniec];
  23.  
  24. int j=zac,i;
  25. for (i=0;i<koniec;i++)
  26. {
  27. if (a[i]>pivot)
  28. {
  29. vymen(a+i,a+j);
  30. j++;
  31. }
  32. }
  33.  
  34. vymen(a+koniec,a+j);
  35. return j;
  36. }
  37.  
  38. int qselect(int *a,int zac,int koniec,int k )
  39. {
  40. if (k>=0 && k<=(koniec-zac+1)) {
  41. int pIndex;
  42.  
  43. if (zac == koniec) return a[zac];
  44. pIndex = tried(a, zac, koniec);
  45. int lavepole = pIndex - zac + 1;
  46. if (lavepole == k) return a[k];
  47. else if (lavepole > k) return qselect(a, zac, pIndex - 1, lavepole);
  48. else return qselect(a, pIndex + 1, koniec, lavepole);
  49. }
  50. return -1;
  51. }
  52.  
  53.  
  54. long sucet_k_najvacsich(int cena[], int n, int k)
  55. {
  56. long l=0;
  57. int i,j;
  58.  
  59.  
  60. qselect(cena,0,n-1,k);
  61.  
  62. for (i=0;i<n;i++)
  63. {
  64. printf("%d ",cena[i]) ;
  65. }
  66. for (j=0;j<k;j++)
  67. {
  68. l+=cena[j];
  69. }
  70.  
  71.  
  72. return l;
  73.  
  74. }
  75.  
  76. int main(void)
  77. {
  78. // tu si mozete nieco testovat
  79. int i, *x, n, k;
  80.  
  81. scanf("%d %d", &n, &k);
  82. x = (int*)malloc(n * sizeof(int));
  83. for (i = 0; i < n; i++)
  84. scanf("%d", &x[i]);
  85.  
  86. printf("%ld\n", sucet_k_najvacsich(x, n, k));
  87. return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement