예제 #1
0
void quicksort(int *v, int f, int l) {
    if (f >= l)
        return;
    int p = rand() % (l - f + 1) + f;
    /*
        localiza posicao aleatoria para inicio da ordenacao
     */
    troca(v, p, f);
    p = f;
    int i = f, j = l;
    while (i < j) {
        while (v[i] <= v[p] && i <= l)
            i++;
        while (v[j] > v[p])
            j--;
        if (j > i)
            troca(v, i, j);
    }
    troca(v, j, p);
    quicksort(v, f, j - 1);
    /*
    chamada recursiva para ordenar posicoes anteriores
     */
    quicksort(v, j + 1, l);
    /*
    chamada recursiva para ordenar posicoes posteriores
     */
    
    return;

}
예제 #2
0
파일: macro.c 프로젝트: carlosbazilio/lp
main() {
	int x = 10, y = 20;
	troca(x, y);
	// Chamada da mesma macro não redefine tmp, pois
	//esta é definida dentro do bloco expandido
	troca(x, y);
	printf("Valor de x e y: #d e #d\n", x, y);
}
예제 #3
0
파일: main.c 프로젝트: Drebt/Bixos-2018
void rotacao(int m[MAXLINHA][MAXCOLUNA], int* linhas, int* colunas) {
    int maior = *linhas > *colunas ? *linhas : *colunas;
    for (int i = 0; i < maior; i++) {
        for (int j = i; j < maior; j++) {
            troca(&m[i][j], &m[j][i]);
        }
    }
    troca(linhas, colunas);
    rebatimentoVertical(m, *linhas, *colunas);
}
int particiona(int *V, int inicio, int fim) {
	int i = inicio, j;
	for ( j=inicio+1; j<=fim; ++j ) 
		if ( V[j] < V[inicio] ) {
			i++;
			troca(&V[i], &V[j]);
		}

	troca(&V[inicio], &V[i]);

	return i;
}
int permuta_buscando_isomorfismo(int *P, int inicio, int n, grafo *G, grafo *H) {
	if ( inicio == n - 1 ) 
		return testa_isomorfismo(G, H, P);

	// gera as permutacoes recursivamente em ordem nao-lexicografica
	int i;
	for ( i=inicio; i<=n; i++ ) {
		troca(&P[i], &P[inicio]);
		if ( permuta_buscando_isomorfismo(P, inicio + 1, n, G, H) ) return 1;
		troca(&P[i], &P[inicio]);
	}

	return 0;
}
예제 #6
0
파일: qsort.c 프로젝트: kubota/CRepo
/* qsort: ordena v[esq]... v[dir] em ordem crescente */
void qsort(int v[], int esq, int dir) {
    int i, ultimo;
    void troca(int v[], int i, int j);

    if (esq >= dir) 
    	return;
    troca(v, esq, (esq+dir)/2);
    ultimo = esq;

    if (v[i] < v[esq])
    	troca(v, ++ultimo, i);
    troca(v, esq, ultimo);
    qsort(v, esq, ultimo-1);
    qsort(v, ultimo+1, dir);
}
예제 #7
0
파일: apontador.c 프로젝트: kubota/CRepo
main(){
	
	int x = 1, y = 2, z[10];
	int *ip; 		/* ip é um apontador */
	int *ip2;

	printf("int *ip:%d\n", *ip);

	ip = &x; 		/* ip agora aponta para int x */	
	ip2 = &y;
	printf("ip = &x:%d\n", *ip);
	printf("ip2 = &x:%d\n", *ip2);
	
	y = *ip;		/* y agora eh 1 */
	printf("y = *ip:%d\n", y);

	*ip = 0;		/* y agora eh 0 */
	printf("y = *ip:%d\n", y);

	ip = &z[0];		/* ip agora aponta para z[0] */

	troca(&x, &y);
	ip = &x; 		/* ip agora aponta para int x */	
	ip2 = &y;
	printf("ip = &x:%d\n", *ip);
	printf("ip2 = &x:%d\n", *ip2);


	return 0;
}
예제 #8
0
int main(){
	char text[1000], encript[1000];
	ler(text);
	troca(text, encript);
	exibe_str(encript);
	return 1;
}
예제 #9
0
파일: bolha.c 프로젝트: thomazs/Ordenacao
void bolha(int vetor[], int tamanho){
    int i, j;
    for(i=0; i<tamanho; i++)
        for(j=0;j<tamanho-1;j++)
            if (vetor[j]>vetor[j+1])
                troca(&vetor[j], &vetor[j+1]);
}
예제 #10
0
파일: busca.c 프로젝트: fspacheco/PGM2
void bolha_gen (int n, void* v, int tam, int(*cmp)(void*,void*)) {
	puts("Bolha");
	//Circulo* c;
	int i, j;
	void* p1;
	void* p2;
	for (i=n-1; i>0; i--) {
		int fez_troca = 0;
		for (j=0; j<i; j++) {
			p1 = acessa(v,j,tam);
			p2 = acessa(v,j+1,tam);
			if (cmp(p1,p2)) {
				troca(p1,p2,tam);
				fez_troca = 1;
			}
		}
		/*if (tam == sizeof(Circulo)){
			c = (Circulo*) p1;
			printf("Centro do circulo%-2i = \t(%.2f,%.2f)\tRaio = %.2f\tCor : R = %3i, G = %3i, B = %3i\n",n-i,c[n-i].centro.x,c[i].centro.y,c[i].raio,c[i].cor.r,c[i].cor.g,c[i].cor.b);
		}*/
		if (fez_troca == 0)   /* nao houve troca */
			return;

	}
}
예제 #11
0
int main(){
int a,b;
scanf("%d %d", &a,&b);
troca(&a,&b);
printf("%d %d\n\a",a,b);
return 0;
}
예제 #12
0
파일: main.c 프로젝트: Drebt/Bixos-2018
void rebatimentoHorizontal(int m[MAXLINHA][MAXCOLUNA], int linhas, int colunas) {
    for (int i = 0; i < linhas/2; i++) {
        for (int j = 0; j < colunas; j++) {
            troca(&m[i][j], &m[linhas - i - 1][j]);
        }
    }
}
void quick(int* vet,int esq,int dir,long long int *comparacoes, long long int *trocas){
int pivo = vet[(esq + dir) / 2];

int i = esq;
int j = dir;

	(*comparacoes)++;
	while(i <= j){
		(*comparacoes)++;
		while(vet[i] < pivo && i < dir){
			(*comparacoes)++;
			i++;
		} 
		(*comparacoes)++;
		while(vet[j] > pivo && j > esq){
			(*comparacoes)++;
			j--;
		} 
		
		if(i <= j){
			troca(&vet[i],&vet[j]);
			(*trocas)++; 
			i++;
			j--;
		}
	}

	if(esq < j){
		quick(vet,esq,j,comparacoes,trocas);
	}

	if(dir > i){
		quick(vet,i,dir,comparacoes,trocas);
	}
}
예제 #14
0
파일: main.c 프로젝트: Drebt/Bixos-2018
void rebatimentoVertical(int m[MAXLINHA][MAXCOLUNA], int linhas, int colunas) {
    for (int i = 0; i < linhas; i++) {
        for (int j = 0; j < colunas/2; j++) {
            troca(&m[i][j], &m[i][colunas - j - 1]);
        }
    }
}
예제 #15
0
파일: insert.c 프로젝트: vhbarros/aed1
/*
int main (void)
{
   
    int l, i;
    scanf( "%d", &l);
    int *p;
    p = malloc(sizeof(int) * l);
    if (p == NULL) {
        printf("Erro");
    }
    for (i=0; i<l; i++){
        scanf ("%d", &p[i]);
    }
    imprime (p, l);
    insertion (p, 0, l);
    imprime (p, l);
   
return 0;   
}*/
void insertion(int *g, int ini, int fim){
    int j, i;
    for (i=ini+1; i<fim; i++){
        for (j=i; j>ini && g[j]<g[j-1] ; j--){
                troca(g, j, j-1);
        }            
    }   
}           
예제 #16
0
Var::Var(int li, int ls)
{
    if (ls < li)
        troca(li,ls);

    for (int v=li; v<=ls; v++)
        _dom.push_back(v);
}
예제 #17
0
int main () {
	char texto[100], codificado[100];
	char *str;
	gets (str);
	troca (texto, codificado);
	imprime (codificado);
	return 0;
}
void quicksort (int *inteiros, int esq, int dir) // esta função ordena um vetor de inteiros em ordem crescente
{
    if(esq<dir){ //esta parte checa se as posição recebidas como argumento fazem sentido
    int pos = rand() % (dir - esq + 1) + esq;
    troca(inteiros, pos, esq);
    int pos_pivo = dividir(inteiros,esq,dir);
    quicksort(inteiros,esq,pos_pivo -1); // recursão da função quicksort
    quicksort(inteiros,pos_pivo +1,dir);}
}
예제 #19
0
int main()
{
	int A, B;
	troca(&A, &B);

	printf("Soma: %d\nValor de B: %d\n",A,B);
	system("pause");
	return 0;
}
예제 #20
0
파일: main.c 프로젝트: Drebt/Bixos-2018
void ordena(int ordenar[JANELA_MAX*JANELA_MAX], int tam) {
    for (int k = 0; k < tam; k++) {
        for (int l = 1; l < tam - k; l++) {
            if (ordenar[k] > ordenar[k + l]) {
                troca(&ordenar[k], &ordenar[k + l]);
            }
        }
    }
}
예제 #21
0
/*
  Algoritmo Backtracking.
  
  1.
  2.   Candidatos <- {1, 2, ..., n}
  3.   for i in Candidatos
  4.      Candidatos <- Candidatos \ {i}
  5.      backtrack(Candidatos)
  6.      Candidatos <- Candidatos U {i}
*/
int backtracking(unsigned int inicio)
{
  if (!objetivo(inicio))
    return 0;
  
  unsigned int i;  
  for (i = inicio; i < VERTICES->tamanho; i++)
    {
      troca(&VERTICES->C[i], &VERTICES->C[inicio]);
      
      if (!backtracking(inicio + 1))
	return 0;

      troca(&VERTICES->C[i], &VERTICES->C[inicio]);
    }

  return 1;
}
void selectionI(int* vet,int tam, long long int*comparacoes, long long int *trocas){
int i,pos_maior;

	for(i = tam-1; i > 0; i--){
	  pos_maior = maior(vet,i,comparacoes);	
	  (*trocas)++;
	  troca(&vet[i],&vet[pos_maior]);	  
	}
}
void heap_sort(int* vetor,int tam,long long int *comparacoes,long long int *trocas){
buildmax(vetor,tam,comparacoes,trocas);
int i;
	for(i = tam - 1; i > 0; i--){
		(*trocas)++;
		troca(&vetor[0],&vetor[i]);
		heap_fy(vetor,i,0,comparacoes,trocas);		
	}
}
예제 #24
0
void bubble(int * v, int n) {
	int i, j;
	for (i=1;i<n;i++) {
		for (j=0;j < n-i; j ++) {
			if (v[j] > v[j + 1]) {
				troca(v, j);
			}
		}
	}
}
예제 #25
0
void main()
{
    int n1=0,n2=0;
    printf("Digite 2 numeros inteiros:\n");
    printf("Digite 1o. numero inteiro:\n");  
    scanf("%d",&n1);
    printf("Digite 2o. numero inteiro:\n");  
    scanf("%d",&n2);      
	troca(&n1,&n2);
}
예제 #26
0
int main() {
	float a = 1, b = 2;
	
	troca(&a, &b);
	
	printf("a: %.1f\n", a);
	printf("b: %.1f", b);
	
	return 0;
}
int selectionR(int* vet, int tam, long long int *comparacoes, long long int *trocas){
	if(tam == 1){
		return 1; // vetor esta ordenado
	}else{
		int m = maior(vet,tam,comparacoes);
			troca(&vet[tam-1],&vet[m]);
			(*trocas)++;			
			return selectionR(vet,tam-1,comparacoes,trocas);
	}
}
예제 #28
0
void main(){
    int a,b;
    printf("Entre com um valor inteiro:\n");
    scanf("%d",&a);
    printf("Entre com outro valor inteiro:\n");
    scanf("%d",&b);

    printf("a = %d e b = %d\n",a,b);
    troca(&a,&b);
    printf("a = %d e b = %d\n",a,b);
}
예제 #29
0
파일: backup.c 프로젝트: Squiercg/algprog
int separa(int p, int r, int vetor[2][MAX]) {
  int x, i, j;
  x = vetor[1][p];
  i = p - 1;
  j = r + 1;
  while (1) {
    do {
      j--;
    } while (vetor[1][j] > x);
    do {
      i++;
    } while (vetor[1][i] < x);
    if (i < j) {
      troca(&vetor[0][i], &vetor[0][j]);
      troca(&vetor[1][i], &vetor[1][j]);
    } else {
      return j;
    }
  }
}
int dividir (int *inteiros, int esq, int dir) // esta função coloca o pivô do vetor em sua posição correta
{
    int i = esq + 1, j = dir; // esq é o elemento tomado com pivô e dir é o último elemento do vetor
    while(i <= j) // este ciclo percorre todo o vetor até encontrar a posição correta do pivô
    {
        if(*(inteiros + i) < *(inteiros + esq) || *(inteiros + i) == *(inteiros + esq))
            i++;
        if(*(inteiros + j) > *(inteiros + esq) || *(inteiros + j) == *(inteiros + esq))
            j--;
        if(j<i)
            break;
        troca(inteiros, i, j);
    }
    if (j >= 0) // esta parte coloca o pivô em sua posição correta e retorna a posição
 {
    troca(inteiros, j, esq);
    return j;
}

}