Un arreglo (matriz, vector, lista) es un tipo especial de objeto compuesto por una colección de elementos del mismo tipo de datos que se almacenan consecutivamente en memoria. Ej.
Propiedades de Arreglos
• Los arreglos son objetos.
• Son creados dinámicamente (en run time).
• Pueden ser asignados a variables de tipo Object .
• Cualquier método de la clase Object puede ser invocado en un arreglo.
• Un objeto arreglo contiene una secuencia de variables del mismo tipo.
• Las variables son llamadas los componentes del arreglo.
Arreglos Lineales o Unidimensionales
Estos arreglos constituyen una lista de variables relacionadas. La forma de acceso a cada uno de sus diferentes valores, es usando acompañando al nombre de la variable más un índice: nombreArreglo [índice]. Los índices están en el rango de 0 a tamaño-1.
Declaración: tipoDato[] nombreArreglo;
o
tipoDato nombreArreglo [];
Creación:NombreArreglo = new tipoDato[n];
Ejemplo: int lista[];
lista= new int[10];
InicializacióntipoDatonombreArreglo[]={valor1,valor2,…,valorN};
//Este caso no requiere el uso de new
//Este caso no requiere el uso de new
Tipos de ordenamiento
Ordenamiento interno.
Se lleva a cabo completamente en memoria principal. Todos los objetos que se ordenan caben en la memoria principal de la computadora.
Ordenamiento externo.
No cabe toda la información en memoria principal y es necesario ocupar memoria secundaria. El ordenamiento ocurre transfiriendo bloques de información a memoria principal en donde se ordena el bloque y este es regresado, ya ordenado, a memoria secundaria.
- Metodo Burbuja (Bubble Sort)Es el algoritmo de ordenamiento más sencillo de todos, conocido también como método del intercambio directo, el funcionamiento se basa en la revisión de cada elemento de la lista que va a ser ordenada con el elemento siguiente, intercambiando sus posiciones si están en el orden equivocado, para esto se requieren varias revisiones hasta que ya no se necesiten más intercambios, lo que indica que la lista ha sido ordenada. El origen del nombre de este algoritmo proviene de la forma con la que suben por la lista los elementos durante los intercambios, tal y como si fueran "burbujas", el algoritmo fundamental de este método es la simple comparación de elementos siendo así el más fácil de implementar.
Codificación en java:- Programa principalpackage ordenarburbuja;
import java.util.Scanner;
public class OrdenarBurbuja {
public static void main(String[] args) {
Scanner orderbur= new Scanner(System.in);
int num;
System.out.println("Ingrese la cantidad de posiciones que tendra el vector ");
num=orderbur.nextInt();
System.out.println("Ingrese los datos del vector");
Scanner ordenar = new Scanner(System.in);
int vector[] = new int[30];
int i,j,aux;
for (i=0;i<num;i++)
{
System.out.print("A["+(i+1)+"]=");
vector[i]=ordenar.nextInt();
}
for (i=0;i<num;i++)
{
for (j=i+1;j<num;j++)
{
if (vector[i]>vector[j])
{
aux=vector[i];
vector[i]=vector[j];
vector[j]=aux;
}
}
}
System.out.print("El vector es = [");
for (i=0;i<num;i++)
{
System.out.print(vector[i]+ ", ");
}
System.out.print("]");
}
} - Metodo Insersion directa (Insert Sort)Este método también se denomina “método del jugador de cartas”, por la semejanza con la forma de clasificar las cartas de una baraja, insertando cada carta en el lugar adecuado. El algoritmo ordena los dos primeros elementos de la lista, a continuación el tercer elemento se inserta en la posición que corresponda, el cuarto se inserta en la lista de tres elementos, y así sucesivamente. Este proceso continua hasta que la lista este totalmente ordenada. Sea una lista A[1], A[2], ... A[n]. Los pasos a dar para una ordenación ascendente son: 1. Ordenar A[1] y A[2].
2. Comparar A[3] con A[2], si A[3] es mayor o igual a que A[2], sigue con el siguiente elemento si no se compara A[3] con A[1]; si A[3] es mayor o igual que A[1], insertar A[3] entre A[1] yA[2]. Si A[3] es menor que A[1], entonces transferir A[3] a A[1], A[1] a A[2] y A[2] a A[3].
3. Se suponen ordenados los n-1 primeros elementos y corresponde insertar el n-ésimo elemento. Si A[m] es mayor que A[k] (con K = 1, 2, ..., m-1), se debe correr una posición A[k+1], ... A[m-1] y almacenar A[m] en la posición k+1.
Codificación en Java:
- Programa principal
package insercion;
import java.util.Scanner;
public class Insercion {
public static void main(String[] args) {
Scanner numero= new Scanner(System.in);
int num;
System.out.println("Ingrese la cantidad de posiciones que tendra el vector ");
num=numero.nextInt();
System.out.println("Ingrese los datos del vector");
Scanner ordenar = new Scanner(System.in);
int vector[] = new int[num];
int aux;
int x,y;
for (int i=0;i<num;i++)
{
System.out.print("A["+(i+1)+"]=");
vector[i]=ordenar.nextInt();
}
for (x=1 ; x < vector.length; x++)
{
aux = vector[x];
for (y = x-1; y >=0 && vector [y]>aux ; y --)
{
vector[y+1] = vector [y];
vector [y] = aux;
}
}
System.out.println("El nuevo vector es: ");
for(int i=0; i<vector.length; i++)
{
System.out.println(vector[i]);
}
}
} - Metodo de Seleccion
La idea básica es encontrar el elemento más pequeño (grande), en orden ascendente de la lista, e intercambiarlo con el elemento que ocupa la primera posición en la lista, a continuación se busca el siguiente elemento más pequeño y se transfiere a la segunda posición. Se repite el proceso hasta que el último elemento ha sido transferido a su posición correcta. El algoritmo de ordenación depende a su vez del algoritmo necesario para localizar el componente mayor (menor) de un array. Es un proceso muy similar al método de la burbuja pero haciendo más eficiente la búsqueda y evitando intercambios innecesarios.Codificación en Java:
- Programa principal
package ordenamientoporseleccion;
import java.util.Scanner;
public class OrdenamientoporSeleccion {
public static void main(String[] args) {
Scanner numero= new Scanner(System.in);
int num;
System.out.println("Ingrese la cantidad de posiciones que tendra el vector ");
num=numero.nextInt();
System.out.println("Ingrese los datos del vector");
Scanner orderselec = new Scanner(System.in);
int vector[] = new int[num];
for (int i=0;i<num;i++)
{
System.out.print("A["+(i+1)+"]=");
vector[i]=orderselec.nextInt();
}
OrdenarSe r=new OrdenarSe();
r.ordselecc(vector);
r.imprimir(vector);
}
}
- Clase
package ordenamientoporseleccion;
public class OrdenarSe {
public void ordselecc(int vector2[]){
for (int i=0;i < vector2.length -1 ; i++){
int min=i;
for(int j= i+1; j< vector2.length ; j++){
if(vector2[j]< vector2[min]){
min=j;
}
}
int aux = vector2[i];
vector2[i] = vector2[min];
vector2 [min] = aux;
}
}
public void imprimir(int vector2[]){
System.out.println("El nuevo vector es: ");
for(int i=0; i<vector2.length; i++)
{
System.out.println(vector2[i]);
}
}
} - Metodo Heap Sort (Ordenamiento por Montículos)
Es un algoritmo de ordenamiento no recursivo, no estable, consiste en almacenar todos los elementos del vector a ordenar en un montículo (heap), y luego extraer el nodo que queda como nodo raíz del montículo (cima) en sucesivas iteraciones obteniendo el conjunto ordenado. Basa su funcionamiento en una propiedad de los montículos, por la cual, la cima contiene siempre el menor elemento (o el mayor, según se haya definido el montículo) de todos los almacenados en él.
Codificación en Java:
- Programa principal
package ordenamientoporheap;
import java.util.Scanner;
public class Ordenamientoporheap {
Scanner numero= new Scanner(System.in);
int num;
System.out.println("Ingrese la cantidad de posiciones que tendra el vector ");
num=numero.nextInt();
System.out.println("Ingrese los datos del vector");
Scanner orderselec = new Scanner(System.in);
int vector[] = new int[num];
for (int i=0;i<num;i++)
{
System.out.print("A["+(i+1)+"]=");
vector[i]=orderselec.nextInt();
}
for(int i=vector.length; i>1; i--)
{
HeapSort r=new HeapSort();
r.fnSortHeap(vector, i-1);
}
System.out.println("El vector ordenado es: ");
for (int i = 0; i < vector.length; i++)
{
System.out.print(" "+vector[i]);
}
}
}
- Clase
package ordenamientoporheap;
public class HeapSort {
public void fnSortHeap(int arr[], int arr2)
{
int i, o;
int lCh, rCh, mCh, root, tmp;
root = (arr2-1)/2;
for(o = root; o >= 0; o--)
{
for(i=root;i>=0;i--)
{
lCh = (2*i)+1;
rCh = (2*i)+2;
if((lCh <= arr2) && (rCh <= arr2))
{
if(arr[rCh] >= arr[lCh])
{
mCh = rCh;
}
else
{
mCh = lCh;
}
}
else
{
if(rCh > arr2)
{
mCh = lCh;
}
else
{
mCh = rCh;
}
}
if(arr[i] < arr[mCh])
{
tmp = arr[i];
arr[i] = arr[mCh];
arr[mCh] = tmp;
}
}
}
tmp = arr[0];
arr[0] = arr[arr2];
arr[arr2] = tmp;
return;
}
} - Metodo Shell (Shell Sort)
- Metodo Quick Sort (Ordenamiento Rápido)Codificación en Java:Es el algoritmo de ordenamiento más eficiente de todos, se basa en la técnica de "Divide y Vencerás", que permite en promedio, ordenar n elementos en un tiempo proporcional a n*log(n).
Algoritmo Fundamental:
- Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote.
- Resituar los demás elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que él, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementación deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponderá en la lista ordenada.
- La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha.
- Repetir este proceso de forma recursiva para cada sublista mientras
éstas contengan más de un elemento. Una vez terminado este proceso todos
los elementos estarán ordenados.
- Programa principalpackage javaapplication7;
public class JavaApplication7 {
public static void main(String[] args) {
System.out.println("El vector ingresado es 5, 8 ,6 ,3 ,9 ,45 ,76 ,9");
int vector1 []= {5, 8 ,6 ,3 ,9 ,45 ,76 ,9};
OrdenarQ o=new OrdenarQ();
o.ordenarquicksort(vector1);
for(int i=0; i<vector1.length; i++)
{
System.out.println(vector1[i]);
}
}
}
- Clasepackage javaapplication7;
public class OrdenarQ {
public void ordenarquicksort(int [] vector2)
{
vector2 = quicksort1(vector2);
}
public int[] quicksort1 (int numeros[])
{
return quicksort2 (numeros,0,numeros.length -1);
}
public int[] quicksort2 (int numeros[],int izq, int der)
{
if (izq >= der)
return numeros;
int i=izq,d=der;
if(izq != der)
{
int pivote;
int aux;
pivote= izq;
while (izq != der)
{
while (numeros [der] >= numeros [pivote] && izq < der)
der --;
while (numeros [izq] < numeros [pivote] && izq<der)
izq++;
if (der != izq)
{
aux=numeros [der];
numeros[der]= numeros [izq];
numeros[izq]= aux;
}
if (izq == der)
{
quicksort2 (numeros,1,izq-1);
quicksort2 (numeros,izq+1,d);
}
}
}
else
return numeros;
return numeros;
}
}
By: Jonathan P. Herrera S.




