CC10A06 COMPUTACION I 23 de Junio del 2003 static void separarNegPos(int[] a, int n){ int i = 0; for(int j=0; j<n; ++j){ if(a[j]<0){ swap(a, i, j); ++i; } } } static void ordenarXcols(String[] a, int posini, int posfin, int colini, int colfin){ int n = a.length; //creamos un arreglo de ciertas columnas : sera nuestro patron de ordenacion String[] aux = new String[n]; for(int i = posini; i<=posfin; ++i) aux[i] = a[i].substring(colini, colfin+1); //ordenamos el subconjunto [posini,posfin] for(int i=posfin-1; i>posini; --i){ int iM = posini; for(int j=posini; j<i; ++j) if(aux[j].compareTo(aux[iM])<0) iM = j; //intercambiamos (en aux[], y paralelamente en a[]) String res = aux[iM]; String res_a = a[iM]; aux[iM] = aux[i]; a[iM] = a[i]; aux[i] = res; a[i] = res_a; } } static int quickMediana(int[] a, int n){ int[] aux = new int[n]; for(int i=0; i<n; ++i) aux[i] = a[i]; quickSort(aux, 0, n-1); return aux[n/2]; } static void swap(int[]a, int i, int j){ int aux = a[i]; a[i] = a[j]; a[j] = aux; } static void quickSort (int arreglo[], int iMin, int iMax){ if (iMin >= iMax) return; int k = particionar(arreglo, iMin, iMax); quickSort(arreglo, iMin, k-1); quickSort(arreglo, k+1, iMax); } static int particionar (int a[], int iMin, int iMax){ int iPiv = iMin; int k = iMin; for(int j=k+1; j<=iMax; ++j) if (a[j] < a[iPiv] ){ ++k; swap(a, k, j); } swap(a, k, iPiv); return k; } CC10A06 COMPUTACION I 23 de Junio del 2003