0% encontró este documento útil (1 voto)
168 vistas

Formas de Ordenar Un Array en Java

El documento describe tres métodos para ordenar arrays en Java: intercambio, burbuja y quicksort. El método de intercambio ordena un array comparando cada elemento con los siguientes y cambiando de posición los elementos si están en orden incorrecto. El método de burbuja también compara elementos adyacentes y los intercambia si están desordenados, repitiendo este proceso hasta que el array esté completamente ordenado. El método quicksort divide el array en subarrays más pequeños usando un pivote, ordena los subarrays recursivamente, y combina los subarrays ordenados.

Cargado por

writter23
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (1 voto)
168 vistas

Formas de Ordenar Un Array en Java

El documento describe tres métodos para ordenar arrays en Java: intercambio, burbuja y quicksort. El método de intercambio ordena un array comparando cada elemento con los siguientes y cambiando de posición los elementos si están en orden incorrecto. El método de burbuja también compara elementos adyacentes y los intercambia si están desordenados, repitiendo este proceso hasta que el array esté completamente ordenado. El método quicksort divide el array en subarrays más pequeños usando un pivote, ordena los subarrays recursivamente, y combina los subarrays ordenados.

Cargado por

writter23
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 16

Formas de ordenar un array en Java

Hola a todos, hoy os enseare las distintas formas que tenemos para ordenar un array.
Ordenar un array es muy importante, ya sea de nmeros 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
nmeros 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, despus la segunda posicin con el resto de posiciones posteriores. Te enseamos un
ejemplo de como funciona.

Mtodo intercambio con nmeros:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

public static void intercambio(int lista[]){


//Usamos un bucle anidado
for(int i=0;i<(lista.length-1);i++){
for(int j=i+1;j<lista.length;j++){
if(lista[i]>lista[j]){
//Intercambiamos valores
int variableauxiliar=lista[i];
lista[i]=lista[j];
lista[j]=variableauxiliar;

}
}

Mtodo intercambio con cadenas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

public static void intercambioPalabras(String lista[]){


//Usamos un bucle anidado
for(int i=0;i<(lista.length-1);i++){
for(int j=i+1;j<lista.length;j++){
if(lista[i].compareToIgnoreCase(lista[j])>0){
//Intercambiamos valores
String variableauxiliar=lista[i];
lista[i]=lista[j];
lista[j]=variableauxiliar;

Veamos un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12

public class IntercambioApp {


public static void main(String[] args) {
final int TAMANIO=10;
int lista[]=new int [TAMANIO];
rellenarArray(lista);

"coz"};

String lista_String[]={"americano", "Zagal", "pedro", "Tocado",

System.out.println("Array de nmeros sin ordenar:");


imprimirArray(lista);

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

//ordenamos el array
intercambio(lista);
System.out.println("Array de nmeros ordenado:");
imprimirArray(lista);
System.out.println("Array de String sin ordenar:");
imprimirArray(lista_String);
//ordenamos el array
intercambioPalabras(lista_String);
System.out.println("Array de String ordenado:");
imprimirArray(lista_String);
}
public static void imprimirArray (int lista[]){
for(int i=0;i<lista.length;i++){
System.out.println(lista[i]);
}
}
public static void imprimirArray (String lista[]){
for(int i=0;i<lista.length;i++){
System.out.println(lista[i]);
}
}
public static void rellenarArray (int lista[]){
for(int i=0;i<lista.length;i++){
lista[i]=numeroAleatorio();
}
}
private static int numeroAleatorio (){
return ((int)Math.floor(Math.random()*1000));
}
public static void intercambio(int lista[]){
//Usamos un bucle anidado
for(int i=0;i<(lista.length-1);i++){
for(int j=i+1;j<lista.length;j++){
if(lista[i]>lista[j]){
//Intercambiamos valores
int variableauxiliar=lista[i];
lista[i]=lista[j];
lista[j]=variableauxiliar;
}
}

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

}
public static void intercambioPalabras(String lista[]){
//Usamos un bucle anidado
for(int i=0;i<(lista.length-1);i++){
for(int j=i+1;j<lista.length;j++){
if(lista[i].compareToIgnoreCase(lista[j])>0){
//Intercambiamos valores
String variableauxiliar=lista[i];
lista[i]=lista[j];
lista[j]=variableauxiliar;

}
}

Burbuja: consiste en comparar el primero con el segundo, si el segundo es menor que el


primero se intercambian los valores. Despus el segundo con el tercero y as sucesivamente,
cuando no haya ningn intercambio, el array estar ordenado. Lo peor de este mtodo de
ordenacin, es que tiene una complejidad de O(n2) haciendo que cuanto mas valores a ordenar
mayor tiempo tardara en ordenar. Te mostramos un ejemplo de como funciona:

1
2

Mtodo burbuja para nmeros:

public static void burbuja (int lista[]){


int cuentaintercambios=0;
//Usamos un bucle anidado, saldra cuando este ordenado el array

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

nuevo

cuentaintercambios=0;

Mtodo burbuja para cadena:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

for (boolean ordenado=false;!ordenado;){


for (int i=0;i<lista.length-1;i++){
if (lista[i]>lista[i+1]){
//Intercambiamos valores
int variableauxiliar=lista[i];
lista[i]=lista[i+1];
lista[i+1]=variableauxiliar;
//indicamos que hay un cambio
cuentaintercambios++;
}
}
//Si no hay intercambios, es que esta ordenado.
if (cuentaintercambios==0){
ordenado=true;
}
//Inicializamos la variable de nuevo para que empiece a contar de

public static void burbujaPalabras (String lista_palabras[]){


boolean ordenado=false;
int cuentaIntercambios=0;
//Usamos un bucle anidado, saldra cuando este ordenado el array
while(!ordenado){
for(int i=0;i<lista_palabras.length-1;i++){
if
(lista_palabras[i].compareToIgnoreCase(lista_palabras[i+1])>0){
//Intercambiamos valores
String aux=lista_palabras[i];
lista_palabras[i]=lista_palabras[i+1];
lista_palabras[i+1]=aux;
//indicamos que hay un cambio
cuentaIntercambios++;
}
}
//Si no hay intercambios, es que esta ordenado.
if (cuentaIntercambios==0){
ordenado=true;
}
//Inicializamos la variable de nuevo para que empiece a contar de
nuevo
cuentaIntercambios=0;
}
}

Veamos un ejemplo completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

public class BurbujaApp {


public static void main(String[] args) {
final int TAMANIO=10;
int lista[]=new int [TAMANIO];
rellenarArray(lista);

"coz"};

String lista_String[]={"americano", "Zagal", "pedro", "Tocado",

System.out.println("Array de nmeros sin ordenar:");


imprimirArray(lista);
//ordenamos el array
burbuja(lista);
System.out.println("Array de nmeros ordenado:");
imprimirArray(lista);
System.out.println("Array de String sin ordenar:");
imprimirArray(lista_String);
//ordenamos el array
burbujaPalabras (lista_String);
System.out.println("Array de String ordenado:");
imprimirArray(lista_String);
}
public static void imprimirArray (int lista[]){
for(int i=0;i<lista.length;i++){
System.out.println(lista[i]);
}
}
public static void imprimirArray (String lista[]){
for(int i=0;i<lista.length;i++){
System.out.println(lista[i]);
}
}
public static void rellenarArray (int lista[]){
for(int i=0;i<lista.length;i++){
lista[i]=numeroAleatorio();
}
}
private static int numeroAleatorio (){
return ((int)Math.floor(Math.random()*1000));
}
public static void burbuja (int lista[]){
int cuentaintercambios=0;

48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

//Usamos un bucle anidado, saldra cuando este ordenado el array


for (boolean ordenado=false;!ordenado;){
for (int i=0;i<lista.length-1;i++){
if (lista[i]>lista[i+1]){
//Intercambiamos valores
int variableauxiliar=lista[i];
lista[i]=lista[i+1];
lista[i+1]=variableauxiliar;
//indicamos que hay un cambio
cuentaintercambios++;
}
}
//Si no hay intercambios, es que esta ordenado.
if (cuentaintercambios==0){
ordenado=true;
}
//Inicializamos la variable de nuevo para que empiece a contar de
nuevo
}

cuentaintercambios=0;
}

public static void burbujaPalabras (String lista_palabras[]){


boolean ordenado=false;
int cuentaIntercambios=0;
//Usamos un bucle anidado, saldra cuando este ordenado el array
while(!ordenado){
for(int i=0;i<lista_palabras.length-1;i++){
if
(lista_palabras[i].compareToIgnoreCase(lista_palabras[i+1])>0){
//Intercambiamos valores
String aux=lista_palabras[i];
lista_palabras[i]=lista_palabras[i+1];
lista_palabras[i+1]=aux;
//indicamos que hay un cambio
cuentaIntercambios++;
}
}
//Si no hay intercambios, es que esta ordenado.
if (cuentaIntercambios==0){
ordenado=true;
}
//Inicializamos la variable de nuevo para que empiece a contar de
nuevo
cuentaIntercambios=0;
}

95
96
97
98
99

Quicksort: consiste en ordenar un array mediante un pivote, que es un punto intermedio en el


array, es como si se ordenaran pequeos trozos del array, haciendo que a la izquierda esten los
menores a ese pivote y en la derecha lo mayores a este, despus se vuelve a calcular el pivote de
trozos de listas. Usa recursividad. Le pasamos el array, su posicin inicial y su posicin final como
parmetro. Tiene una complejidad de O(n log2 n), haciendo que mejore el rendimiento aun teniendo
muchos valores que ordenar. Te dejo un ejemplo:

Tambin os dejo un enlace donde lo explica ms grficamente, pincha aqu para verlo.
o
Quicksort con nmeros:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

public static void quicksort (int lista1[], int izq, int der){
int i=izq;
int j=der;
int pivote=lista1[(i+j)/2];
do {
while (lista1[i]<pivote){
i++;
}
while (lista1[j]>pivote){
j--;
}
if (i<=j){
int aux=lista1[i];
lista1[i]=lista1[j];
lista1[j]=aux;
i++;
j--;
}

16
17
18
19
20
21
22
23
24
25
26

}while(i<=j);
if (izq<j){
quicksort(lista1, izq, j);
}
if (i<der){
quicksort(lista1, i, der);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

Quicksort con cadenas:

public static void quicksortP (String lista1[], int izq, int der){
int i=izq;
int j=der;
int pivote=(i+j)/2;
do {
while (lista1[i].compareToIgnoreCase(lista1[pivote])<0){
i++;
}
while (lista1[j].compareToIgnoreCase(lista1[pivote])>0){
j--;
}
if (i<=j){
String aux=lista1[i];
lista1[i]=lista1[j];
lista1[j]=aux;
i++;
j--;
}
}while(i<=j);
if (izq<j){
quicksortP(lista1, izq, j);
}
if (i<der){
quicksortP(lista1, i, der);
}
}

Veamos un ejemplo completo:

1
2
3
4
5
6

public class QuicksortApp {


public static void main(String[] args) {
final int TAMANIO=10;
int lista[]=new int [TAMANIO];
rellenarArray(lista);

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

String lista_String[]={"americano", "Zagal", "pedro", "Tocado",


"coz"};
System.out.println("Array de nmeros sin ordenar:");
imprimirArray(lista);
//ordenamos el array
quicksort(lista, 0, lista.length-1);
System.out.println("Array de nmeros ordenado:");
imprimirArray(lista);
System.out.println("Array de String sin ordenar:");
imprimirArray(lista_String);
//ordenamos el array
quicksortP(lista_String, 0, lista_String.length-1);
System.out.println("Array de String ordenado:");
imprimirArray(lista_String);
}
public static void imprimirArray (int lista[]){
for(int i=0;i<lista.length;i++){
System.out.println(lista[i]);
}
}
public static void imprimirArray (String lista[]){
for(int i=0;i<lista.length;i++){
System.out.println(lista[i]);
}
}
public static void rellenarArray (int lista[]){
for(int i=0;i<lista.length;i++){
lista[i]=numeroAleatorio();
}
}
private static int numeroAleatorio (){
return ((int)Math.floor(Math.random()*1000));
}
public static void quicksort (int lista1[], int izq, int der){
int i=izq;
int j=der;
int pivote=lista1[(i+j)/2];
do {
while (lista1[i]<pivote){
i++;
}

54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

while (lista1[j]>pivote){
j--;
}
if (i<=j){
int aux=lista1[i];
lista1[i]=lista1[j];
lista1[j]=aux;
i++;
j--;
}
}while(i<=j);
if (izq<j){
quicksort(lista1, izq, j);
}
if (i<der){
quicksort(lista1, i, der);
}
}

public static void quicksortP (String lista1[], int izq, int der){
int i=izq;
int j=der;
int pivote=(i+j)/2;
do {
while (lista1[i].compareToIgnoreCase(lista1[pivote])<0){
i++;
}
while (lista1[j].compareToIgnoreCase(lista1[pivote])>0){
j--;
}
if (i<=j){
String aux=lista1[i];
lista1[i]=lista1[j];
lista1[j]=aux;
i++;
j--;
}
}while(i<=j);
if (izq<j){
quicksortP(lista1, izq, j);
}
if (i<der){
quicksortP(lista1, i, der);
}
}

101
102
103
104
105
106

Mtodo sort de java.util.Arrays: para ejecutarlo escribimos Arrays.sort(array a


ordenar); simplemente insertamos como parmetro el array que queremos ordenar. Tiene varios
mtodos para distintos tipos. Te mostramos un ejemplo practico:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

import java.util.Arrays;
public class sortApp {
public static void main(String[] args) {
final int TAMANIO=10;
int lista[]=new int [TAMANIO];
rellenarArray(lista);
String lista_String[]={"americano", "Zagal", "pedro", "Tocado",
"coz"};
System.out.println("Array de nmeros sin ordenar:");
imprimirArray(lista);
//ordenamos el array
Arrays.sort(lista);
System.out.println("Array de nmeros ordenado:");
imprimirArray(lista);
System.out.println("Array de String sin ordenar:");
imprimirArray(lista_String);
//ordenamos el array, ordenara primero las mayusculas y luego las
minusculas
Arrays.sort(lista_String);
System.out.println("Array de String ordenado:");
imprimirArray(lista_String);
}
public static void imprimirArray (int lista[]){
for(int i=0;i<lista.length;i++){
System.out.println(lista[i]);
}
}
public static void imprimirArray (String lista[]){
for(int i=0;i<lista.length;i++){
System.out.println(lista[i]);
}
}

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

public static void rellenarArray (int lista[]){


for(int i=0;i<lista.length;i++){
lista[i]=numeroAleatorio();
}
}
private static int numeroAleatorio (){
return ((int)Math.floor(Math.random()*1000));
}

Espero que os sea de ayuda. Si tenis dudas, preguntad. Estamos para ayudarte.

14

53

Quizs te pueda interesar:


INTERFACES
Interfaces
en Java
EN JAVA
MTODO
Mtodo
String
STRING
Matches
MATCHES
De Java
DE |JAVA
Disco| DISCO
Duro DeDURO
Roer DE ROER
CASTING
Casting
EnEN
Java
JAVA
| Disco
| DISCO
Duro
DURO
De Roer
DE ROER
MTODOS
Mtodos
DeDE
LaLA
Clase
CLASE
MathMATH
De Java
DE JAVA
| Disco
| DISCO
Duro De
DURO
RoerDE ROER
POLIMORFISMO
Polimorfismo
Java
JAVA
INTRODUCCION
Introduccion
datos
DATOS
con Scanner
CON SCANNER
con JavaCON JAVA

Mtodos java.util.Arrays JavaBucles anidados en Java

5 Comments
1.

RjLebrancn
22/10/2013 @

Madre de Dios!! supongo que para los expertos esto ser msica celestial yo, pobre y triste analfabeto
de las ciencias informticas, me quedo como estaba. De todas formas y como miembro del club dejo el

comentario y paso a otra pgina quiz me entere de algo en ella.


Traffic-Club
RjL-Cine de Balcn
Saludos,
RjLebrancn
2.

Francisco Masa
24/10/2013 @

Como el compaero RjLebrancn, no puedo hacer ningn comentario de valor ante tal despliegue de
frmulas y cdigos, pero te saludo como miembro de Traffic-Club desde Millas y birras
3.

Wiskas
14/02/2014 @

Podras explicarme teniendo 3 vectores independientes, como ordenarlos con quicksort de forma que si
ordenas por nombre coincida con su apellido y su dni y si ordenas por DNI coincida con su nombre
etc,,,,
4.

Pikao
14/02/2014 @

Lo mas fcil es hacer un array que contenga objetos, que en tu caso tendra apellido, DNI y nombre, as
al cambiar se cambiaran los 3 datos que necesitas que en realidad son 1.
Otra forma, algo mas complicada,seria modificando el mtodo para que aceptase una matriz en lugar de
un vector y personalizarlo segn tu gusto.
Tambin puedes pasar los 3 arrays y a la hora del intercambio que tambin intercambie esas posiciones.
Yo te recomendara la primera opcin.
Si necesitas algo mas, puedes comentarlo por aqui o mandar un mensaje
[email protected]
5.

Andres O.
15/07/2015 @

Hola amigo, excelente explicacion.


Pero creo que el grafico esta mal, el pivote en la segunda llamada no es 21 si no es 15.
La lista en la primera pasada queda: 24,21,15,46,65,88,75,85,76,99,84,79
La lista se divide en dos:
24,21,15,46,65
88,75,85,76,99,84,79
Si divides el 4 que es el valor que tiene i te dara 2, la posicion lista[2]=15
Lo puedes comprobar haciendo un:
int pivote=lista1[(i+j)/2];
System.out.println(Pivote: +pivote);
Pivote: 65
Pivote: 15

Pivote: 24
Pivote: 46
Pivote: 76
Pivote: 76
Pivote: 99
Pivote: 88
Pivote: 84
O tal vez este haciendo algo mal yo, no me quiero quedar con la duda.
Por cierto buen pagina la tuya te felicito!

También podría gustarte