Teclas de acceso directo de programación de cable lento de Qinghong
algoritmo de paquete;
clase pública MergeSort {
// suma larga estática privada = 0;
/**
*
* Fusión bidireccional
* Principio: fusionar dos listas ordenadas en una lista ordenada
*< /pre>
*
* @param a
* @param s
* El comienzo de la primera lista ordenada Subíndice
* @param m
* El subíndice inicial de la segunda lista ordenada
* @param t
* El subíndice final de la segunda lista ordenada
*
*/
fusión de vacío estático privado (int[] a, int s, int m, int t) {
int[] tmp = new int [t - s + 1];
int i = s, j = m, k = 0
mientras (i
si (a[i]<=a[j]){
tmp[k]=a [i];
k++;
i++;
} else {
tmp[k] = a[j];
j++;
k++;
}
}
mientras (yo
tmp[k] = a[ i];
i++;
k++;
}
mientras (j <= t) {
tmp[k] = a[j];
j++;
k++;
} p>
System.arraycopy(tmp, 0, a, s, tmp.length);
}
/**
p>* @param a
* @param s
* @param len
* La longitud del conjunto ordenado para cada fusión
* p>
*/
public static void mergeSort(int[] a, int s, int len) {
int size = a.length;
int mid = tamaño /(len <<1);
int c = tamaño &((len <<1) -1);
> // -------Finalizar el algoritmo cuando solo queda un conjunto ordenado-------//
if (mid == 0)
return;
//------Realizar una ordenación por combinación-------//
for (int i = 0; i
s=i
}
// -------Fusiona los números restantes y el último conjunto ordenado--- ----//
if (c != 0)
merge(a, tamaño - c - 2 *len, tamaño - c, tamaño - 1); p>
// ---- ---Ejecutar recursivamente el siguiente orden de combinación------//
mergeSort(a, 0, 2 *len);
}
public static void main(String[] args) {
int[] a = new int[] {4, 3, 6, 1, 2, 5 };
mergeSort (a, 0, 1);
for (int i = 0; i < a.length; ++i) {
System.out.print(a[i] + " ");
}
}
}