Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // uloha-2-1.c -- Tyzden 2 - Uloha 1
- // Richard Kubik, 26.9.2016 12:25:33
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- void vymen(int *a, int *b) {
- int temp;
- temp = *a;
- *a = *b;
- *b = temp;
- }
- int tried(int *a, int zac, int koniec)
- {
- int velkost=(koniec-zac +1);
- int pIndex=rand() %velkost;
- vymen(a+zac+pIndex,a+(koniec));
- int pivot=a[koniec];
- int j=zac,i;
- for (i=0;i<koniec;i++)
- {
- if (a[i]>pivot)
- {
- vymen(a+i,a+j);
- j++;
- }
- }
- vymen(a+koniec,a+j);
- return j;
- }
- int qselect(int *a,int zac,int koniec,int k )
- {
- if (k>=0 && k<=(koniec-zac+1)) {
- int pIndex;
- if (zac == koniec) return a[zac];
- pIndex = tried(a, zac, koniec);
- int lavepole = pIndex - zac + 1;
- if (lavepole == k) return a[k];
- else if (lavepole > k) return qselect(a, zac, pIndex - 1, lavepole);
- else return qselect(a, pIndex + 1, koniec, lavepole);
- }
- return -1;
- }
- long sucet_k_najvacsich(int cena[], int n, int k)
- {
- long l=0;
- int i,j;
- qselect(cena,0,n-1,k);
- for (i=0;i<n;i++)
- {
- printf("%d ",cena[i]) ;
- }
- for (j=0;j<k;j++)
- {
- l+=cena[j];
- }
- return l;
- }
- int main(void)
- {
- // tu si mozete nieco testovat
- int i, *x, n, k;
- scanf("%d %d", &n, &k);
- x = (int*)malloc(n * sizeof(int));
- for (i = 0; i < n; i++)
- scanf("%d", &x[i]);
- printf("%ld\n", sucet_k_najvacsich(x, n, k));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement