#include<math.h>
#include<ctype.h>
#include<dos.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
enum boolean{false,true};
struct {
boolean flag;
int k;
} D[5000];
void main()
{
clrscr();
clock_t start,end;
char flag;
int x,aux,j,n;
textcolor(11);
printf("\n\t\t\tMETODO DE INSERCION\n");
printf("\n\n\t\tNUMERO DE ELEMENTOS A ORDENAR: ");
scanf("%d",&n);
randomize();
printf("\n\n\t\t\t*** VECTOR DESORDENADO ***\n\n");
for(int l=1;l<=n;l++)
{
x=random(9999);
D[l].k=x;
printf("\t\t\t D[%d]= %d\n",l,D[l].k);
if(j==22){
j=0;
}
j++;
}
getch();
{for(int i=1;i<=n;i++)
{
start=clock();
D[aux]=D[i];
j=j-1;
flag=false;
}
/*
Primeros errores:
1. j para que te sirve?
2. tomas el tiempo cada ke da una vuelta, quiero entender
que quieres saber cu nto tarda ordenar los elementos
deber¡a de ir cuando inicias a ordenar...
3. Aux no inicia en cero ya que es una variable local, si fuera global
tendría valor de cero
4. Aux no la mueves y D[aux] es una posici¢n que ira tomando
los valores de D[i] pero nunca se afectara, es decir
Este ciclo es inservible...
*/
do
{if (D[aux].k<D[j].k)
{
D[j+1]=D[j];
j=j-1;
}
else
flag=true;
}while (j==0||flag==true);
D[j+1]=D[aux];
}
/*
Por todo lo anterior D[aux].k nunca va a ser menor ke
D[j].k por lo tanto flag siempre tomar true, y nunca
saldr del ciclo
*/
clrscr();
printf("\n\n\n\t\t\t *** VECTOR ORDENADO ***\n\n");
int p=0;
for (int i=1;i<=n;i++)
{
printf("\t\t\t\tD[%d]= %d\n",i,D[i].k);
if(p==22)
{
p=0;
}
p=p+1;
}
end=clock();
printf("\n\n\t\t\tEl tiempo es:%f",(end-start)/CLK_TCK);
getch();
/*
Esto no es C++, es 'C ANSI'
*/
}
/*
ALGORITMO INSERCION DIRECTA
//Antes de llamar a esta funci¢n tomas el tiempo
// y luego despues de llamarla. Haces la resta y listo
void insercion_directa(int a[],int n)
{
cout<<"Inserción directa"<<endl<<endl;
int i,aux,k;
for (i=1;i<n;i++)
{ aux=a[i];
for(k=i-1;(k>=0)&&(aux<a[k]);k--)
a[k+1]=a[k];
a[k+1]=aux;
}
}
*/