PDA

Visualizza la versione completa : [C] vettore separato su k


SSSS90
04-04-2014, 13:55
Salve forum devo realizzare il seguente "semplice" programma:

Un vettore si dice separato se dato un indice k, gli elementi di indice inferiore a k sono tutti minori degli elementi di indice superiore a k. Si scriva una funzione che prenda in ingresso un vettore di interi, al dimensione del vettore e k, e restituisca 1 se il vettore è separato, 0 se non lo è.

Io l'ho realizzato così ma ho l'impressione che qualcosa che non va.La mia idea è dividere il vettore in due parti :a)dall'elemento 0 all'elemento k del vettore b)dall'elemento k del vettore fino al riempimento..secondo voi il mio ragionamento è giusto.?


#include<stdio.h>
#include<stdlib.h>
int vettore_separato(int v[],int n,int k);
int main()
{

int k;
int n=7;
int separato;


int vett[7]={3,7,9,7,12,11,10};
printf("inserire l'indice k:\n");
scanf("%d",&k);
separato=vettore_separato(vett,7,k);
if(separato==0)
printf("Il vettore non e' separato su k");
else
printf("Il vettore e' separato su k");

system("pause");

}
int vettore_separato(int vett[],int n,int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=k+1;j<n;j++)
if(vett[i]>=vett[j])
return 0;
return 1;

}

MItaly
05-04-2014, 19:18
Mi sembra che tu ti stia complicando inutilmente la vita... perché confronti tutti gli elementi sotto con tutti quelli sopra (O(n^2))? Semplicemente cerca il massimo degli elementi prima di k (una passata O(k)), il minimo degli elementi oltre k (una passata (O(n-k)) e alla fine confronta: se il massimo pre-k è inferiore al minimo post-k allora il vettore è separato (il tutto in tempo lineare nella dimensione del vettore).

Per inciso, dovresti ormai aver imparato che il linguaggio va sempre indicato nel titolo della discussione...

SSSS90
08-04-2014, 08:36
grz.seguirò il tuo suggerimento...chiedo scusa la prox volta..indicherò il linguaggio..alla prox e grz della risp..

Loading