Ejemplo n.º 1
0
void ord_qsort (TTABLA t, int tam)
{
  /* Ordena de menor a mayor la tabla t de tamaño tam
   * por el método de quicksort
   */
  int i;              /* índice de bucle */
  int ult;            /* índice mayor de los menores o 
						 iguales que el escogido */

  if (tam > 1)        /* si hay menos de 2 elementos 
						 no hacer nada */
    {
	  /* el escogido se pone al principio */
      intercambia(0, tam/2, t);
      ult = 0;
      for ( i = 1; i < tam; i++)
        if (COND_QSORT)
          {
            ult++;
            if (ult != i)
              intercambia(ult, i, t);
          }
      if (ult != 0)
        /* el escogido se pone en medio */
        intercambia(0, ult, t);
	  /* ordena la subtabla de los menores */
      ord_qsort(t, ult);
	  /* ordena la subtabla de los mayores o iguales */
      ord_qsort(t+ult+1, tam-(ult+1));
    }
}
Ejemplo n.º 2
0
main()
{
    register int i,j;
    int pivote,primero,ultimo;
    i=primero;
    j=ultimo;
    pivote=cartelera.movie.nombre[(primero+ultimo)/2];
    do
    {
        while(cartelera[i].movie.nombre<pivote)
        {
            i++;
        }
        while(cartelera[i].movie.nombre>pivote)
        {
            j--;
        }
        if(i<=j)
        {
            intercambia(&cartelera[i].movie.nombre,&cartelera[j].movie.nombre);
            i++;
            j--;
        }
    }while(i<=j);
    if(primero<j)
    {
        ordena(cartelera,primero,j);
    }
    if(ultimo>i)
    {
        ordena(cartelera,i,ultimo);
    }
}
Ejemplo n.º 3
0
void quickSortAP(Alumno A[Max], int primero, int ultimo){
    register int i=primero, j=ultimo;
    char pivote[15];
    strcpy(pivote,A[(primero+ultimo) / 2].ApellidoP);

    do{
        while(strcmp(A[i].ApellidoP,pivote) < 0){
            i++;
        }
        while(strcmp(A[j].ApellidoP,pivote) > 0){
            j--;
        }
        if(i <= j){
            intercambia(A,i,j);
            i++;
            j--;
        }
    }while(i <= j);
    if(primero < j){
        quickSortAP(A, primero, j);
    }
    if(ultimo > i){
        quickSortAP(A, i, ultimo);
    }
}
Ejemplo n.º 4
0
int main(){

	int x = 50;
	int y = 33;
	printf("Valor de x: %d\n", x);
	printf("Valor de y: %d\n", y);
	intercambia(&x, &y);
	printf("Valor de x: %d\n", x);
	printf("Valor de y: %d\n", y);

}
Ejemplo n.º 5
0
void insercionNom(Alumno A[Max],int cont){
    register int i=-1, j=-1;
    aux Aux;

    for (i=1; i<cont; i++){
        strcpy(Aux.nombre,A[i].Nombre);
        j=i-1;
        while((j >= 0) && strcmp(Aux.nombre,A[j].Nombre) < 0){
            intercambia(A,(j+1),j);
            j--;
        }
        strcpy(A[j+1].Nombre,Aux.nombre);
    }
}
Ejemplo n.º 6
0
void burbujaMejoradoAM(Alumno A[Max], int cont){
    register int i=-1, j=-1, band=0;

    i = 0;
    while (i<cont-1 && !band){
        band=1;
        for(j=0; j<cont-1; j++){
            if(strcmp(A[j].ApellidoM,A[j+1].ApellidoM)  > 0){
                intercambia(A,j,(j+1));
                band = 0;
            }
        }
        i++;
    }
}
Ejemplo n.º 7
0
void seleccionEdad(Alumno A[Max], int cont){
    register int i = -1, j = -1, menor = -1;

    for(i=0; i<cont-1; i++){
        menor=i;
        for(j=i+1; j<cont; j++){
            if (A[j].Edad > A[menor].Edad){
                menor = j;
            }
        }
        if (i != menor){
		    intercambia(A,menor,i);
        }
    }
}
Ejemplo n.º 8
0
int main(void) {
    int vector1[TALLA], vector2[TALLA];
    int talla, i;
    srand(time(NULL));
    talla = rand() % TALLA + 1;
    for (i = 0; i < talla; i++) {
        vector1[i] = rand() % 100 + 1;
        vector2[i] = rand() % 100 + 1;
    }
    printf ("Vector 1\n");
    mostrar(vector1, talla);
    printf ("Vector 2\n");
    mostrar(vector2, talla);

    intercambia(vector1, vector2, talla);

    printf ("Despues...\n");
    printf ("Vector 1\n");
    mostrar(vector1, talla);
    printf ("Vector 2\n");
    mostrar(vector2, talla);
    return 0;
}
Ejemplo n.º 9
0
//Busqueda local de una sola iteracion para hormigas
void busqueda_local_och(int* &solucion, int** matriz_flujos, int** matriz_distancias, int n_unidades){

  int *vecino, *dlb;
  int coste_act, coste_vecino;
  bool improve_flag = true;
  bool fin_busqueda = false;

  vecino = new int[n_unidades];
  dlb = new int[n_unidades];

  //Inicializamos los valores de dlb a 0
  for(int i=0; i<n_unidades; i++)
    dlb[i]=0;

  coste_act=coste(solucion, matriz_flujos, matriz_distancias, n_unidades);

  //int coste_inicial=coste_act;

  for(int i=0; i<n_unidades; i++){

    if(dlb[i] == 0){
      improve_flag = false;

      for(int j=0; j<n_unidades; j++){

        //Para que i y j sean diferentes
        if(i==j) continue;

        //check move i,j (mejorar con costes parciales)
        genera_vecino(solucion, vecino, n_unidades, i, j);
        coste_vecino=coste(vecino,matriz_flujos,matriz_distancias,n_unidades);
        if (coste_vecino<coste_act){
          //aplicar movimiento i,j
          //sol_actual=vecino
          coste_act=coste_vecino;
          intercambia(solucion,i,j);

          //std::cout << "\nMejora: " << coste_vecino;

          dlb[i]=0;
          dlb[j]=0;
          improve_flag=true;
          break;//Cogemos la primera solucion mejor a la actual
        }
      }
      if(!improve_flag){
        //std::cout << "No se ha encontrado mejora" << std::endl;
        dlb[i]=1;


        if(i==n_unidades){
          //std::cout << "Sin mejora en el entorno" << std::endl;
          fin_busqueda=true;
        }
      }
      else{//Si hemos encontrado mejora pasamos a otra iteracion para
        break;//generar otro vecindario
      }
    }
  }
    //Salida de info
    //std::cout << "\nIteracion: " << iter_actual;
    //std::cout << "\nCoste actual: " << coste_act << "\n";


  //std::cout << "\nSolucion inicial: " << coste_inicial <<"\n";
}