ADSW
COMPLEJIDAD
ALGORITMOS DE ORDENACIÓN
• Bubble sort: O(n2)
• Selection sort: O(n2)
• Insertion sort: O(n2)
• Quicksort: O(n2)
• Mergesort: O(n log n)
Visitar enlace para ver cómo funciona cada algoritmo de ordenación:
[Link]
GRAFOS
• Algoritmo de Prim
• Algoritmo de Dijkstra
BUBBLE SORT O(n2)
@Override
public void sort (String[ ] data) {
boolean changed;
do{
changed=false;
for (int i=0; i<[Link]-1; i++) {
if (data[i].compareTo(data[i+1])>0) {
swap(data, i, i+1);
changed=true;
}
}
} while (changed);
}
private void swap (String[ ] data, int i, int j) {
if (i==j)
return;
String si=data[i];
String sj=data[j];
data[i]=sj;
data[j]=si;
}
SELECTION SORT O(n2)
@Override
public void sort (String [ ] data) {
for (int i=0; i<[Link]-1; i++) {
int j=min(data, i, [Link]);
swap(data, i, j);
assert sorted(data, 0, i+1);
}
}
private int min (String [ ] data, int a, int z) {
int m=a;
for (int i=a; i<z; i++) {
if (data[i].compareTo(data[m]) <0 )
m=i;
}
return m;
}
INSERTION SORT O(n2)
@Override
public void sort (String[ ] data) {
for (int i=1; i<[Link]; i++) {
insert (data, I, data[i]);
assert sorted (data, 0, i+1);
}
}
Private void insert (String[ ] data, int z, String v) {
int j=z;
while (0<j && [Link](data[j-1]) < 0)
j--;
[Link](data, j, data, j+1, z-j);
data[j]=v;
}
QUICKSORT O(n2)
private void sort (String[ ] data, int a, int z) {
if (z<=a)
return;
String pivot=data[a];
int i=a;
for (int j=a+1; j<z; j++) {
if (data[j].compareTo(pivot)) < 0) {
i++;
swap (data, i, j);
}
}
swap (data, a, i);
sort (data, a, i);
sort (data, i+1, z);
}
private void swap (String[ ] data, int i, int j) {
if (i==j)
return;
String si=data[i];
String sj=data[j];
data[i]=sj;
data[j]=si;
}
MERGESORT RECURSIVO O (n log n)
@Override
public void sort (String[ ] data) {
List <String> list = new ArrayList<>( );
[Link](list, data);
sort (list);
[Link] (data);
}
private void sort (List<String> list) {
if ([Link]( ) < 2)
return;
int m = [Link]( ) / 2;
List<String> left = new ArrayList<>([Link] (0, m));
List<String> right = new ArrayList<>([Link](m, [Link]( )));
sort (left);
sort (right);
[Link]( );
while ([Link]( ) > 0 && [Link]( ) > 0) {
String sl = [Link](0);
String sr = [Link](0);
if ([Link](sr) < 0)
[Link]([Link](0));
else
[Link]([Link](0));
}
while ([Link]( ) > 0)
[Link]([Link](0));
while ([Link]( ) > 0)
[Link]([Link](0));
}