Combinar para ordenar:
Núcleo: divide y vencerás, recursividad
Idea: primera división y cierre
implementación sub-código:
/ *
*归并排序
* /
public static void merge_sort (int [] str, int izquierda, int derecha, int [] temp) {
si (a la izquierda <derecha) {
int loco = (izquierdo + derecho) / 2;
merge_sort (str, izquierda, mad, temp);
merge_sort (str, mad + 1, a la derecha, temp);
merge (str, izquierda, derecha, temperatura);
}
*归并排序
* /
public static void merge_sort (int [] str, int izquierda, int derecha, int [] temp) {
si (a la izquierda <derecha) {
int loco = (izquierdo + derecho) / 2;
merge_sort (str, izquierda, mad, temp);
merge_sort (str, mad + 1, a la derecha, temp);
merge (str, izquierda, derecha, temperatura);
}
}
El código combinado para lograr:
// izquierda y parte derecha de la matriz definir operaciones str array
public static Merge void (int [] str, int izquierda, int derecha, int [] TEMP) {
// período str de operación de la matriz
// matriz desde el corte intermedio l = izquierda desde el dos primera sección a la segunda sección de la loca-1 para r = loco derecha
int = MAD (izquierdo + derecho) / 2;
int l = izquierda;
int + r = loco 1;.
int i = 0;
// tamaño de las dos matrices se almacenan en Ordenada array temp;
// cuando una matriz límites salida
@ límites: la izquierda que a los datos de segmento de la derecha
, mientras que (l <= loco && r <= derecha) {// no fuera de rango continúa comparativo
IF (STR [L] <= STR [R & lt]) {
TEMP [I] = STR [L];
L ++;
I ++;
} la else {
TEMP [I] = STR [R & lt];
R & lt ++;
I ++;
}
}
// cuando se cierra la transfronterizas tienen que considerar no ha terminado la comparación de ese período
// porque cada segmento se ordenan por lo que un aumento directo de la temperatura [volver]
// tramo transfronterizo izquierda
IF (L> MAD) {
// Añadir el lado derecho restante de
la mientras que (R & lt <= derecha) {
TEMP [I] STR = [R & lt];
I ++;
R & lt ++;
}
}
// los límites adecuados
IF (R & lt> derecha) {
// se añadió a la restante a la izquierda
al mismo tiempo que (L <= MAD) {
TEMP [I] STR = [L];
I ++;
L ++;
}
public static Merge void (int [] str, int izquierda, int derecha, int [] TEMP) {
// período str de operación de la matriz
// matriz desde el corte intermedio l = izquierda desde el dos primera sección a la segunda sección de la loca-1 para r = loco derecha
int = MAD (izquierdo + derecho) / 2;
int l = izquierda;
int + r = loco 1;.
int i = 0;
// tamaño de las dos matrices se almacenan en Ordenada array temp;
// cuando una matriz límites salida
@ límites: la izquierda que a los datos de segmento de la derecha
, mientras que (l <= loco && r <= derecha) {// no fuera de rango continúa comparativo
IF (STR [L] <= STR [R & lt]) {
TEMP [I] = STR [L];
L ++;
I ++;
} la else {
TEMP [I] = STR [R & lt];
R & lt ++;
I ++;
}
}
// cuando se cierra la transfronterizas tienen que considerar no ha terminado la comparación de ese período
// porque cada segmento se ordenan por lo que un aumento directo de la temperatura [volver]
// tramo transfronterizo izquierda
IF (L> MAD) {
// Añadir el lado derecho restante de
la mientras que (R & lt <= derecha) {
TEMP [I] STR = [R & lt];
I ++;
R & lt ++;
}
}
// los límites adecuados
IF (R & lt> derecha) {
// se añadió a la restante a la izquierda
al mismo tiempo que (L <= MAD) {
TEMP [I] STR = [L];
I ++;
L ++;
}
}
System.out.println ( "temp:" + de Arrays.toString (temp));
// Guardar la matriz temp al número original de STR [] matriz de datos correspondiente al período de funcionamiento
J = int izquierda;
int K = 0;
el tiempo (J <= derecha) {
STR [J] TEMP = [K];
J ++;
K ++;
}
}
System.out.println ( "temp:" + de Arrays.toString (temp));
// Guardar la matriz temp al número original de STR [] matriz de datos correspondiente al período de funcionamiento
J = int izquierda;
int K = 0;
el tiempo (J <= derecha) {
STR [J] TEMP = [K];
J ++;
K ++;
}
}