fork download
  1. /*
  2. Se considera un sir de n (n<=100) numere naturale memorate cu ajutorul unui vector Arr. Sa se realizeze functia SEl care returneaza cel de-al
  3. k-lea element minim din vector. Functia schimba ordinea elementelor Arr, astfel incat, la finalul executarii ei, pe pozitia k in vector se va afla cel de-al
  4. k-lea numar cel mai mic.
  5.  
  6. Exemplu:
  7. n = 6
  8. k = 4
  9. Arr= [14,23,2,1,4,2]
  10. Functia Sel va returna valoarea 14, iar vectorul va contine: (4, 1, 2, 14, 23, 21)
  11. */
  12. #include <stdio.h>
  13. #include <math.h>
  14.  
  15. int arr[] = {0,14,23,2,1,4,21},
  16.  
  17. n = sizeof(arr)/sizeof(arr[0])-1;
  18.  
  19. void swap(int *i, int *j) {
  20. int temp = *i;
  21. *i = *j;
  22. *j = temp;
  23. }
  24.  
  25. int part(int lo, int hi) {
  26.  
  27. int piv = arr[hi],
  28. j = lo - 1,
  29. i;
  30. for(i = lo; i <= hi; i++)
  31. if(arr[i]<=piv) {
  32. ++j;
  33. swap(arr+j,arr+i);
  34. }
  35. return j;
  36. }
  37.  
  38. int sel(int k, int lo, int hi) {
  39. int x = part(lo, hi);
  40. if(k == x) return arr[k];
  41. if(k > x) return sel(k, x+1, hi);
  42. else return sel(k, lo, x-1);
  43. }
  44.  
  45. int main(int argc, char const *argv[]) {
  46.  
  47. for(int i = 1; i <= n; ++i) printf("%d ", arr[i]);
  48.  
  49. int k = 4;
  50.  
  51. printf("\n%d\n",sel(k, 1, n));
  52.  
  53. for(int i = 1; i <= n; ++i) printf("%d ", arr[i]);
  54.  
  55. return 0;
  56. }
Success #stdin #stdout 0s 5412KB
stdin
Standard input is empty
stdout
14 23 2 1 4 21 
14
2 1 4 14 21 23