Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCION A LA PROGRAMACION
2015
No es necesario utilizar todos los elementos del vector, por lo que, en C, al trabajar con ellos,
se suele utilizar una variable entera adicional que nos indique el nmero de datos utilizados.
Ordenacin por seleccin
CEAD ACACIAS
2015
void OrdenarSeleccion (double v[], int N)
{
int i, j, pos_min;
double tmp;
for (i=0; i<N-1; i++) {
// Menor elemento del vector v[i..N-1]
pos_min = i;
for (j=i+1; j<N; j++)
if (v[j]<v[pos_min])
pos_min = j;
// Coloca el mnimo en v[i]
tmp = v[i];
v[i] = v[pos_min];
v[pos_min] = tmp; =
CEAD ACACIAS
2015
void OrdenarInsercion
(double v[], int N)
{
int i, j;
double tmp;
for (i=1; i<N; i++) {
tmp = v[i];
for (j=i; (j>0) && (tmp<v[j-1]); j--)
v[j] = v[j-1];
v[j] = tmp;
}
}
CEAD ACACIAS
2015
void OrdenarBurbuja
(double v[], int N)
{
int i, j;
double tmp;
for (i=1; i<N; i++)
for (j=N-1; j>i; j--)
if (v[j] < v[j-1]) {
tmp = v[j];
v[j] = v[j-1];
v[j-1] = tmp;
}
}
CEAD ACACIAS
2015
CEAD ACACIAS
2015
izda++;
}
} while (izda <= dcha);
// Colocar el pivote en su sitio
swap (&(v[primero]), &(v[dcha]) );
return dcha; // Posicin del pivote
}
Bsqueda lineal = Bsqueda secuencial
// Bsqueda lineal de un elemento en un vector
// - Devuelve la posicin de dato en el vector
// - Si dato no est en el vector, devuelve -1
int search (double vector[], int N, double dato)
{
int i;
int pos = -1;
for (i=0; i<N; i++)
if (vector[i]==dato)
pos = i;
return pos;
}
Versin mejorada
// Bsqueda lineal de un elemento en un vector
// - Devuelve la posicin de dato en el vector
// - Si dato no est en el vector, devuelve -1
int search (double vector[], int N, double dato)
{
int i;
int pos = -1;
for (i=0; (i<N) && (pos==-1); i++)
if (vector[i]==dato)
pos = i;
return pos;
}
Bsqueda binaria
Precondicin
El vector ha de estar ordenado
Algoritmo
Se compara el dato buscado con el elemento en el centro del vector:
- Si coinciden, hemos encontrado el dato buscado.
- Si el dato es mayor que el elemento central del vector, tenemos que buscar el dato en
segunda mitad del vector.
- Si el dato es menor que el elemento central del vector, tenemos que buscar el dato en la
primera mitad del vector.
CEAD ACACIAS
2015
CEAD ACACIAS
2015
{
int izq = 0;
int der = N-1;
int centro = (izq+der)/2;
while ((izq<=der) && (vector[centro]!=buscado)) {
if (buscado<vector[centro])
der = centro 1;
else
izq = centro + 1;
centro = (izq+der)/2;
}
if (izq>der)
return -1;
else
return centro;
}
Arreglos Multidimensionales
Como sabemos, se pueden crear arreglos de cualquier tipo de datos, ahora veremos
que tambin se pueden crear arreglos de arreglos. La forma de declararlos es con
mltiples subndices, cuantos se quieran tener, nosotros trabajaremos a lo ms con
dobles subndices.
tipoArreglo nombre [subndice1] [subndice2] ;
La forma en que queda estructurado un arreglo de dos dimensiones es ms o menos
como se muestra en la figura.
Arreglo
Arreglo[0] Arreglo[0][0] Arreglo[0][1] Arreglo[0][2]
Arreglo[1] Arreglo[1][0] Arreglo[1][1] Arreglo[1][2]
Arreglo[2] Arreglo[2][0] Arreglo[2][1] Arreglo[2][2]
Arreglo[3] Arreglo[3][0] Arreglo[3][1] Arreglo[3][2]
El nombre del arreglo tiene la direccin del primer elemento (Arreglo[0]), y ste a
Su vez tiene la direccin del otro arreglo (Arreglo[0][0]), as para cada elemento de
arreglo( 0, 1, 2, 3).
Cuando se inicializa un arreglo multidimensional se inicializa entre llaves cada arreglo
o bien, por medio de elemento seguidos:
Array1 [2] [3] = {1, 2, 3, 4, 5, 6};
Array2 [2] [3] = {{2, 4, 6}, {8, 10, 12}};
Ejemplo
#include <iostream>
#include <tr1/array>
using namespace std;
using namespace std::tr1;
// -- Constantes -------
CEAD ACACIAS
2015
CEAD ACACIAS
2015
}
void leer_matriz (Matriz& m)
{
cout << "Escribe fila a fila" << endl;
for (unsigned f = 0; f < m.size(); ++f) {
for (unsigned c = 0; c < m[f].size(); ++c) {
cin >> m[f][c];
}
}
}
// -- Principal -------int main ()
{
Matriz m;
leer_matriz(m);
escribir_matriz_formato(m);
}
Busqueda Binaria
//-------------------------------typedef array<int, MAXIMO> Vector;
//-------------------------------// busca la posici_on del primer elemento == x
// si no encontrado, retorna v.size()
//------------unsigned buscar_bin(int x, const Vector& v)
{
unsigned i = 0;
unsigned f = v.size();
unsigned res = v.size();
while (i < f) {
unsigned m = (i + f) / 2;
if (x == v[m]) {
res = i = f = m;
} else if (x < v[m]) {
f = m;
} else {
i = m + 1;
}
}
return res;
}
//---------------------------// busca la posici_on del primer elemento >= x
//------------unsigned buscar_bin_mayig(int x, const Vector& v)
{
unsigned i = 0;
unsigned f = v.size();
while (i < f) {
CEAD ACACIAS
2015
unsigned m = (i + f) / 2;
if (x <= v[m]) {
f = m;
} else {
i = m + 1;
}
}
return i;
}
//---------------------------// busca la posici_on del primer elemento > x
//------------unsigned buscar_bin_may(int x, const Vector& v)
{
unsigned i = 0;
unsigned f = v.size();
while (i < f) {
unsigned m = (i + f) / 2;
if (x < v[m]) {
f = m;
} else {
i = m + 1;
}
}
return i;
}
//--------------------------------
CEAD ACACIAS