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)); } }
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); } }
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); } }
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); }
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); } }
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++; } }
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); } } }
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; }
//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"; }