Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** p22 interclasare mediana unui sir */
- #include <stdio.h>
- /**
- * Interclaseaza tabloul a si b sortate si obtine un tablou c cu elemente sortate de dimensiune n+m
- */
- void interclasare(int n, float a[], int m, float b[], float c[]) {
- int i;//parcurg cu el primul tablou
- int j;//parcurg cu el al doilea tablou
- int k; //Nr de elemente din tabloul rezultat
- i=0;
- j=0;
- k=0;
- while(i<n && j<m) {
- if(a[i]<b[j]) {
- c[k]=a[i];
- i++;
- } else {
- c[k]=b[j];
- j++;
- }
- k++;
- }
- if(i<n) {
- for(; i<n; i++) {///mai sunt element in primul sir
- c[k]=a[i];
- k++;
- }
- } else {
- for(; j<m; j++) {///mai sunt elemente in al doilea sir
- c[k]=b[j];
- k++;
- }
- }
- }
- void afisare(int n, float a[]){
- int i;
- for(i=0;i<n;i++){
- printf("%g ", a[i]);
- }
- printf("\n");
- }
- float mediana(int n, float a[]){
- int m=n/2;
- if(n%2 == 0){
- return (a[m-1]+a[m])/2;
- } else {
- return a[m];
- }
- }
- float mediana_recursiv(int start, int end, float a[]){
- if(start == end){///avem un sg element
- return a[start];
- }
- if(end-start == 1){///avem nr par de elemente in sir si eliminand cate unul din stanga si dreapta, la final vom ramane cu 2 consecutive
- return (a[start]+a[end])/2;
- }
- return mediana_recursiv(start+1, end -1, a);
- }
- int main(){
- float a[]={1,3,5,6,10};
- int n = 5;
- float b[]={0,2,4,16,20,40};
- int m = 5;
- float c[100];
- int p;
- interclasare(n,a,m,b,c);
- p=n+m;
- afisare(p,c);
- printf("Mediana este: %g\n", mediana(p,c));
- printf("Mediana recursiv este: %g\n", mediana_recursiv(0,p-1,c));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement