Sunteți pe pagina 1din 13

Hola a todos, hoy os enseñare las distntas formas que tenemos para ordenar un array.

Ordenar un array es muy importante, ya sea de números o de cadenas, puede haber casos en
que nos interese que los datos esten ordenados en un array. Tenemos varias formas de
hacerlo, tanto con números como con cadenas:
•Intercambio: consiste en comparar el primer valor con el resto de las posiciones posteriores,
cambiando el valor de las posiciones en caso de que el segundo sea menor que el primero
comparado, después la segunda posición con el resto de posiciones posteriores. Te
enseñamos un ejemplo de como funciona.

•Método intercambio con números:


1public static void intercambio(int lista[]){
2
3 //Usamos un bucle anidado
4 for(int i=0;i<(lista.length-1);i++){
5 for(int j=i+1;j<lista.length;j++){
6 if(lista[i]>lista[j]){
7 //Intercambiamos valores
8 int variableauxiliar=lista[i];
9 lista[i]=lista[j];
10 lista[j]=variableauxiliar;
11
12 }
13 }
14 }
15 }
•Método intercambio con cadenas:
1public static void intercambioPalabras(String lista[]){
2
3 //Usamos un bucle anidado
4 for(int i=0;i<(lista.length-1);i++){
5 for(int j=i+1;j<lista.length;j++){
6 if(lista[i].compareToIgnoreCase(lista[j])>0){
7 //Intercambiamos valores
8 String variableauxiliar=lista[i];
9 lista[i]=lista[j];
10 lista[j]=variableauxiliar;
11
12 }
13 }
14 }
15 }
Veamos un ejemplo:
public class IntercambioApp {

1 public static void main(String[] args) {


2
3 final int TAMANIO=10;
4 int lista[]=new int [TAMANIO];
5 rellenarArray(lista);
6
7 String lista_String[]={"americano", "Zagal", "pedro", "Tocado",
8"coz"};
9
10 System.out.println("Array de números sin ordenar:");
11 imprimirArray(lista);
12
13 //ordenamos el array
14 intercambio(lista);
15
16 System.out.println("Array de números ordenado:");
17
imprimirArray(lista);
18
19
System.out.println("Array de String sin ordenar:");
20
imprimirArray(lista_String);
21
22
//ordenamos el array
23
24 intercambioPalabras(lista_String);
25
26 System.out.println("Array de String ordenado:");
27 imprimirArray(lista_String);
28
29 }
30
31 public static void imprimirArray (int lista[]){
32 for(int i=0;i<lista.length;i++){
33 System.out.println(lista[i]);
34 }
35 }
36
37 public static void imprimirArray (String lista[]){
38 for(int i=0;i<lista.length;i++){
39 System.out.println(lista[i]);
40 }
41 }
42
43 public static void rellenarArray (int lista[]){
44 for(int i=0;i<lista.length;i++){
45 lista[i]=numeroAleatorio();
46
}
47
}
48
49
private static int numeroAleatorio (){
50
51 return ((int)Math.floor(Math.random()*1000));
•Burbuja: consiste en comparar el primero con el segundo, si el segundo es menor que el
primero se intercambian los valores. Después el segundo con el tercero y así sucesivamente,
cuando no haya ningún intercambio, el array estará ordenado. Lo peor de este método de
ordenación, es que tene una complejidad de O(n2) haciendo que cuanto mas valores a
ordenar mayor tempo tardara en ordenar. Te mostramos un ejemplo de como funciona:

•Método burbuja para números:


1public static void burbuja (int lista[]){
2 int cuentaintercambios=0;
//Usamos un bucle anidado, saldra cuando este ordenado el array
3 for (boolean ordenado=false;!ordenado;){
4 for (int i=0;i<lista.length-1;i++){
5 if (lista[i]>lista[i+1]){
6 //Intercambiamos valores
7 int variableauxiliar=lista[i];
8 lista[i]=lista[i+1];
9 lista[i+1]=variableauxiliar;
10 //indicamos que hay un cambio
11
cuentaintercambios++;
12
}
13
}
14
15 //Si no hay intercambios, es que esta ordenado.
16 if (cuentaintercambios==0){
17 ordenado=true;
18 }
19 //Inicializamos la variable de nuevo para que empiece a contar
20de nuevo
21 cuentaintercambios=0;
22 }
}
•Método burbuja para cadena:
public static void burbujaPalabras (String lista_palabras[]){
boolean ordenado=false;
1
int cuentaIntercambios=0;
2
//Usamos un bucle anidado, saldra cuando este ordenado el array
3
4 while(!ordenado){
5 for(int i=0;i<lista_palabras.length-1;i++){
6 if
7(lista_palabras[i].compareToIgnoreCase(lista_palabras[i+1])>0){
8 //Intercambiamos valores
9 String aux=lista_palabras[i];
10 lista_palabras[i]=lista_palabras[i+1];
11 lista_palabras[i+1]=aux;
12 //indicamos que hay un cambio
13 cuentaIntercambios++;
14 }
15 }
16 //Si no hay intercambios, es que esta ordenado.
17 if (cuentaIntercambios==0){
18 ordenado=true;
19 }
20 //Inicializamos la variable de nuevo para que empiece a contar
21
de nuevo
22
cuentaIntercambios=0;
23
}
24
Veamos un ejemplo completo:
public class BurbujaApp {

public static void main(String[] args) {

1 final int TAMANIO=10;


2 int lista[]=new int [TAMANIO];
3 rellenarArray(lista);
4
5 String lista_String[]={"americano", "Zagal", "pedro", "Tocado",
6"coz"};
7
8 System.out.println("Array de números sin ordenar:");
9 imprimirArray(lista);
10
11 //ordenamos el array
12 burbuja(lista);
13
14 System.out.println("Array de números ordenado:");
15 imprimirArray(lista);
16
17
System.out.println("Array de String sin ordenar:");
18
imprimirArray(lista_String);
19
20
//ordenamos el array
21
22 burbujaPalabras (lista_String);
23
24 System.out.println("Array de String ordenado:");
25 imprimirArray(lista_String);
26 }
27
28 public static void imprimirArray (int lista[]){
29 for(int i=0;i<lista.length;i++){
30 System.out.println(lista[i]);
31 }
32 }
33
34 public static void imprimirArray (String lista[]){
35 for(int i=0;i<lista.length;i++){
36 System.out.println(lista[i]);
37 }
38 }
39
40 public static void rellenarArray (int lista[]){
41 for(int i=0;i<lista.length;i++){
42 lista[i]=numeroAleatorio();
43
}
44
}
45
46
private static int numeroAleatorio (){
47
48 return ((int)Math.floor(Math.random()*1000));
}
•Quicksort: consiste en ordenar un array mediante un pivote, que es un punto intermedio
en el array, es como si se ordenaran pequeños trozos del array, haciendo que a la izquierda
esten los menores a ese pivote y en la derecha lo mayores a este, después se vuelve a
calcular el pivote de trozos de listas. Usa recursividad. Le pasamos el array, su posición inicial
y su posición fnal como parámetro. Tiene una complejidad de O(n log2 n), haciendo que
mejore el rendimiento aun teniendo muchos valores que ordenar. Te dejo un ejemplo:

También os dejo un enlace donde lo explica más gráfcamente, pincha aquí para verlo.
•Quicksort con números:
public static void quicksort (int lista1[], int izq, int der)
1{
2 int i=izq;
3 int j=der;
4 int pivote=lista1[(i+j)/2];
5 do {
6 while (lista1[i]<pivote){
7 i++;
8 }
9 while (lista1[j]>pivote){
10 j--;
11 }
12 if (i<=j){
13
int aux=lista1[i];
14
lista1[i]=lista1[j];
15
lista1[j]=aux;
16
17 i++;
18 j--;
19 }
20 }while(i<=j);
21 if (izq<j){
22 quicksort(lista1, izq, j);
23 }
24 if (i<der){
25 quicksort(lista1, i, der);
26 }
}
•Quicksort con cadenas:
public static void quicksortP (String lista1[], int izq, int der){
1 int i=izq;
2 int j=der;
3
int pivote=(i+j)/2;
4
do {
5
while (lista1[i].compareToIgnoreCase(lista1[pivote])<0){
6
7 i++;
8 }
9 while (lista1[j].compareToIgnoreCase(lista1[pivote])>0){
10 j--;
11 }
12 if (i<=j){
13 String aux=lista1[i];
14 lista1[i]=lista1[j];
15 lista1[j]=aux;
16 i++;
17 j--;
18 }
19 }while(i<=j);
20 if (izq<j){
21 quicksortP(lista1, izq, j);
22 }
23
if (i<der){
24
quicksortP(lista1, i, der);
25
}
26
}
Veamos un ejemplo completo:
public class QuicksortApp {

public static void main(String[] args) {


1
2 final int TAMANIO=10;
3 int lista[]=new int [TAMANIO];
4 rellenarArray(lista);
5
6 String lista_String[]={"americano", "Zagal", "pedro", "Tocado",
7
"coz"};
8
9
System.out.println("Array de números sin ordenar:");
10
imprimirArray(lista);
11
12
//ordenamos el array
13
14 quicksort(lista, 0, lista.length-1);
15
16 System.out.println("Array de números ordenado:");
17 imprimirArray(lista);
18
19 System.out.println("Array de String sin ordenar:");
20 imprimirArray(lista_String);
21
22 //ordenamos el array
23 quicksortP(lista_String, 0, lista_String.length-1);
24
25 System.out.println("Array de String ordenado:");
26 imprimirArray(lista_String);
27
28 }
29
30 public static void imprimirArray (int lista[]){
31 for(int i=0;i<lista.length;i++){
32 System.out.println(lista[i]);
33 }
34 }
35
36 public static void imprimirArray (String lista[]){
37 for(int i=0;i<lista.length;i++){
38 System.out.println(lista[i]);
39
}
40
}
41
42
public static void rellenarArray (int lista[]){
43
44 for(int i=0;i<lista.length;i++){
45 lista[i]=numeroAleatorio();
46 }
47 }
48
49 private static int numeroAleatorio (){
50 return ((int)Math.floor(Math.random()*1000));
•Método sort de java.utl..rrays: para ejecutarlo escribimos .rrays.sort(array a
ordenar); simplemente insertamos como parámetro el array que queremos ordenar. Tiene
varios métodos para distntos tpos. Te mostramos un ejemplo practco:
1import java.util.Arrays;
2public class sortApp {
3
4 public static void main(String[] args) {
5
6 final int TAMANIO=10;
7 int lista[]=new int [TAMANIO];
8 rellenarArray(lista);
9
10 String lista_String[]={"americano", "Zagal", "pedro", "Tocado",
11"coz"};
12
13 System.out.println("Array de números sin ordenar:");
14 imprimirArray(lista);
15
16 //ordenamos el array
17 Arrays.sort(lista);
18
19 System.out.println("Array de números ordenado:");
20
imprimirArray(lista);
21
22
System.out.println("Array de String sin ordenar:");
23
imprimirArray(lista_String);
24
25
26 //ordenamos el array, ordenara primero las mayusculas y luego las
27minusculas
28 Arrays.sort(lista_String);
29
30 System.out.println("Array de String ordenado:");
31 imprimirArray(lista_String);
32 }
33
34 public static void imprimirArray (int lista[]){
35 for(int i=0;i<lista.length;i++){
36 System.out.println(lista[i]);
37 }
38 }
39
40 public static void imprimirArray (String lista[]){
41 for(int i=0;i<lista.length;i++){
42 System.out.println(lista[i]);
43 }
44 }
45
46 public static void rellenarArray (int lista[]){
47 for(int i=0;i<lista.length;i++){
48
lista[i]=numeroAleatorio();
49
}
50
}
51
52
private static int numeroAleatorio (){
return ((int)Math.floor(Math.random()*1000));
}
}
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

S-ar putea să vă placă și