Formas de Ordenar Un Array en Java
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Veamos un ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
"coz"};
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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
nuevo
cuentaintercambios=0;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
"coz"};
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
cuentaintercambios=0;
}
95
96
97
98
99
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
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);
}
}
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
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
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
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
Espero que os sea de ayuda. Si tenis dudas, preguntad. Estamos para ayudarte.
14
53
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
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 @
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!