Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DEPARTAMENTO DE POSGRADO
“ ORDENAMIENTO DE DATOS ”
PRESENTA:
ERNESTO AMADOR FACIO MM1920006
JOSÉ RUBÉN TRUJILLO GARCÍA MM1920004
¿Qué es ordenamiento?
Los métodos simples son: insertion sort (o por inserción directa) selection
sort, bubble sort, y shellsort, en dónde el último es una extensión al
insertion sort, siendo más rápido. Los métodos más complejos son el
quick-sort, el heap sort, radix y address-calculation sort. El ordenar un
grupo de datos significa mover los datos o sus referencias para que
queden en una secuencia tal que represente un orden, el cual puede ser
numérico, alfabético o incluso alfanumérico, ascendente o descendente.
ORDENAMIENTO DE BURBUJA
burbuja
#include<stdio.h>
#include<conio.h>
int a[3]={3,2,1};
int i,j,aux,n=3;
void main(){
clrscr();
for(i=0;i<=n;i++){
for(j=0;j<n-1;j++){
if(a[j]>a[j+1]){
aux=a[j];
a[j]=a[j+1];
a[j+1]=aux;
}
}
}
for(i=0;i<3;i++)
{
printf("%d",a);
}
getch();
}
ORDENAMIENTO SHELL
shell
#include<stdio.h>
#include<conio.h>
int a[5];
int n=5;
void main()
{
int inter=(n/2),i=0,j=0,k=0,aux;
clrscr();
for (i=0; i<5; i++)
{
printf("INSERTA UN VALOR DEL INDICE %d", i);
scanf("%d",& a);
}
while(inter>0){
for(i=inter;i<n;i++)
{
j=i-inter;
while(j>=0) {
k=j+inter;
if(a[j]<=a[k]){
j--;
}
else{
aux=a[j];
a[j]=a[k];
a[k]=aux;
j=j-inter;
}
}
}
inter=inter/2;
}
for(i=0;i<5;i++)
{
printf("%d n",a);
getch();
}
}
iinserccion
#include<stdio.h>
#include<conio.h>
int a[4]={4,1,7,2};
int n=4;
int i,j,aux;
void main(){
clrscr();
for(i=1;i<n;i++)
{
j=i;
aux=a;
while(j>0 && aux<a[j-1])
{
a[j]=a[j-1];
j--;
}
a[j]=aux;
}
for(i=0;i<4;i++)
{
printf("%d",a);
}
getch();
}
Su funcionamiento es el siguiente:
Y en general:
• Buscar el mínimo elemento entre una posición i y el final de la lista
• Intercambiar el mínimo con el elemento de la posición i
De esta manera se puede escribir el siguiente pseudocódigo para
ordenar una lista de n elementos indexados desde el 1:
Tipos de ordenamientos:
EJERCICIO 01
#include <stdio.h>
#define SIZE 7
void main(void) {
int vector[SIZE];
int j, i, temp;
printf("Introduce los %d valores para ordenar:\n", SIZE);
for(i=0; i<SIZE; i++) {
printf("%d: ", i+1);
scanf("%d", &vector[i]);
printf("\n");
}
/* se aplica el algoritmo de la burbuja */
for(i=0; i<(SIZE-1); i++) {
for (j=i+1; j<SIZE; j++) {
if(vector[j]<vector[i]) {
temp=vector[j];
vector[j]=vector[i];
vector[i]=temp;
}
}
}
printf("El vector ordenado es:\n");
for(i=0; i<SIZE ; i++) {
printf("%d ", vector[i]);
}
printf("\n");
}
EJERCIO 02
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int t, h, e;
for(e=0; e<n;e++)
{
if (v[e]>v[e+1])
v[e+1] = t;
v[e] = v[e+1];
t= v[e];
int i;
if(strcmp(argv[1], "burbuja")==0)
int n, i, m=2, o;
float *v;
n=argc-2;
v =(float *)malloc(n*sizeof(float));
v[i] = atof(argv[i+2]);
OrdenaBurbuja(v, n);
ImprimirVector(v, n);
system("PAUSE");
return 0;
Burbuja: https://youtu.be/P_xNb8nFgmA
Inserción: https://youtu.be/lYNyL0HuWSg
Selección: https://youtu.be/HVa2_UtXkCI
Capturas de Pantallas y Códigos:
#include "clase.h"
#include "LiquidCrystal.h"
void setup()
{
int tiempo1,tiempo2;
Serial.begin(9600);
LiquidCrystal lcd(9,8,7,6,5,4);
lcd.begin(20,4);
TArray datos;
Serial.println("El arreglo es:");
datos.Mostrar();
lcd.setCursor(0,0);
lcd.print("La suma es:"+(String)datos.Sumatoria());
delay(2000);
lcd.setCursor(0,1);
lcd.print("El prom es:"+(String)datos.Promedio());
delay(2000);
lcd.setCursor(0,2);
lcd.print("La mayor nota es:"+(String)datos.FindMax());
delay(2000);
lcd.setCursor(0,3);
lcd.print("La menor nota es:"+(String)datos.FindMin());
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Las notas son:"+(String)datos.Length());
delay(2000);
lcd.setCursor(0,1);
lcd.print("La nota en pos:"+(String)datos.Find());
delay(2000);
lcd.setCursor(0,2);
lcd.print("La moda es:"+(String)datos.Moda());
delay(2000);
lcd.clear();
tiempo1=millis();
datos.Burbuja();
tiempo2=millis();
lcd.setCursor(0,0);
lcd.print("Metodo burbuja");
lcd.setCursor(0,1);
lcd.print("El tiempo es:"+String(tiempo2-tiempo1)+"mS");
delay(2000);
datos.Restaurar();
tiempo1=millis();
datos.Seleccion();
tiempo2=millis();
lcd.setCursor(0,2);
lcd.print("Metodo seleccion");
lcd.setCursor(0,3);
lcd.print("El tiempo es:"+String(tiempo2-tiempo1)+"mS");
delay(2000);
lcd.clear();
datos.Restaurar();
tiempo1=millis();
datos.Insercion();
tiempo2=millis();
lcd.setCursor(0,0);
lcd.print("Metodo insercion");
lcd.setCursor(0,1);
lcd.print("El tiempo es:"+String(tiempo2-tiempo1)+"mS");
delay(2000);
datos.Restaurar();
tiempo1=millis();
datos.Shell();
tiempo2=millis();
lcd.setCursor(0,2);
lcd.print("Metodo shell");
lcd.setCursor(0,3);
lcd.print("El tiempo es:"+String(tiempo2-tiempo1)+"mS");
delay(2000);
}
void loop()
{
}
#include "LiquidCrystal.h"
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "Arduino.h"
_data_pins[0] = d0;
_data_pins[1] = d1;
_data_pins[2] = d2;
_data_pins[3] = d3;
_data_pins[4] = d4;
_data_pins[5] = d5;
_data_pins[6] = d6;
_data_pins[7] = d7;
if (fourbitmode)
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
else
_displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
begin(16, 1);
}
// for some 1 line displays you can select a 10 pixel high font
if ((dotsize != LCD_5x8DOTS) && (lines == 1)) {
_displayfunction |= LCD_5x10DOTS;
}
pinMode(_rs_pin, OUTPUT);
// we can save 1 pin by not using RW. Indicate by passing 255 instead
of pin#
if (_rw_pin != 255) {
pinMode(_rw_pin, OUTPUT);
}
pinMode(_enable_pin, OUTPUT);
// Do these once, instead of every time a character is drawn for speed
reasons.
for (int i=0; i<((_displayfunction & LCD_8BITMODE) ? 8 : 4); ++i)
{
pinMode(_data_pins[i], OUTPUT);
}
// third go!
write4bits(0x03);
delayMicroseconds(150);
// second try
command(LCD_FUNCTIONSET | _displayfunction);
delayMicroseconds(150);
// third go
command(LCD_FUNCTIONSET | _displayfunction);
}
// finally, set # lines, font size, etc.
command(LCD_FUNCTIONSET | _displayfunction);
// clear it off
clear();
void LiquidCrystal::home()
{
command(LCD_RETURNHOME); // set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
void LiquidCrystal::pulseEnable(void) {
digitalWrite(_enable_pin, LOW);
delayMicroseconds(1);
digitalWrite(_enable_pin, HIGH);
delayMicroseconds(1); // enable pulse must be >450ns
digitalWrite(_enable_pin, LOW);
delayMicroseconds(100); // commands need > 37us to settle
}
void LiquidCrystal::write4bits(uint8_t value) {
for (int i = 0; i < 4; i++) {
digitalWrite(_data_pins[i], (value >> i) & 0x01);
}
pulseEnable();
}
pulseEnable();
}
#ifndef LiquidCrystal_h
#define LiquidCrystal_h
#include <inttypes.h>
#include "Print.h"
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80
// flags for display entry mode
#define LCD_ENTRYRIGHT 0x00
#define LCD_ENTRYLEFT 0x02
#define LCD_ENTRYSHIFTINCREMENT 0x01
#define LCD_ENTRYSHIFTDECREMENT 0x00
void clear();
void home();
void noDisplay();
void display();
void noBlink();
void blink();
void noCursor();
void cursor();
void scrollDisplayLeft();
void scrollDisplayRight();
void leftToRight();
void rightToLeft();
void autoscroll();
void noAutoscroll();
using Print::write;
private:
void send(uint8_t, uint8_t);
void write4bits(uint8_t);
void write8bits(uint8_t);
void pulseEnable();
uint8_t _initialized;
uint8_t _numlines;
uint8_t _row_offsets[4];
};
#endif
#include "Arduino.h"
#include "clase.h"
TArray::TArray()
{
for(int i=0;i<250;i++)
{
nums[i]=random(1,250);
copi[i]=nums[i];
}
cnums=250;
}
void TArray::Restaurar()
{
for (int i=0;i<250;i++)
nums[i]=copi[i];
}
int TArray::Mostrar()
{
for(int i=0;i<cnums;i++)
Serial.print((String)nums[i]+" ");
}
int TArray::Sumatoria()
{
int Sum = 0;
for (int i=0;i<cnums;i++)
Sum = Sum + nums[i];
return Sum;
}
float TArray::Promedio()
{
int Suma = 0;
for (int i=0;i<cnums;i++)
Suma = Suma + nums[i];
return (float)Suma/cnums;
}
int TArray::FindMax()
{
int Max=nums[0];
for(int i=0;i<cnums;i++)
if (nums[i]>Max)
Max=nums[i];
return Max;
}
int TArray::FindMin()
{
int Min=nums[0];
for(int i=0;i<cnums;i++)
if (nums[i]<Min)
Min=nums[i];
return Min;
}
int TArray::Length()
{
return cnums;
}
int TArray::Find()
{
int i=0;
int iFind=0;
int dato=10;
char band='F';
while((band=='F')&&(i<cnums))
{
if(nums[i]==dato)
{
band='V';
}
i++;
iFind=i;
}
return iFind-1;
}
int TArray::Moda()
{
int valor=0;
int cuantos=0;
for(int i=0;i<cnums;i++)
{
int contador=0;
for(int j=i;j<cnums;j++)
{
if(nums[i]==nums[j])
contador=contador+1;
}
if(contador>cuantos)
{
valor=nums[i];
cuantos=contador;
}
}
return valor;
}
void TArray::Burbuja()
{ int i,j,aux;
for(i=0; i<cnums; i++)
for(j=0; j<cnums; j++)
if(nums[j]>nums[j+1])
{
aux=nums[j];
nums[j]=nums[j+1];
nums[j+1]=aux;
}
void TArray::Seleccion()
{
int i,j,mi,aux;
void TArray::Insercion()
{
int i,j,pos,aux;
for(i=0; i<cnums; i++)
{
pos=i;
aux=nums[i];
while((pos>0)&&(nums[pos-1]>aux))
{
nums[pos]=nums[pos-1];
pos--;
}
nums[pos]=aux;
}
}
void TArray::Shell()
{
int temp;
for (int gap = cnums/2; gap > 0; gap =gap/2)
class TArray
{
private:
int nums[250];
int copi[250];
int cnums;
public:
TArray();
void Add(int num);
void Restaurar();
int Mostrar();
int Sumatoria();
float Promedio();
int FindMax();
int FindMin();
int Length();
int Find();
int Moda();
void Burbuja();
void Seleccion();
void Insercion();
void Shell();
};
#endif
Conclusión.