La mejora consiste en realizar una búsqueda binaria en lugar de una búsqueda secuencial,para insertar el elemento en la posición que le corresponde.
Imagen:
Codigo:
InsercionBinaria.cpp:
#include "InsercionBinaria.h"
void main(){
InsercionBinaria IB;
int n;
do{cout<<"Cuantos elementos desea ingresar: ";cin>>n;}while(n<1||n>100);
for(int i=0;i<n;i++){
cout<<endl<<"Dato["<<i+1<<"]: ";cin>>IB.vector[i];
}
system("cls");
cout<<endl<<endl<<"Vector original:"<<endl<<endl;
for(int i=0;i<n;i++){
cout<<IB.vector[i]<<" ";
}
IB.insercionBinaria(IB.vector,n);
cout<<endl<<endl<<"Vector Ordenado Con Metodo de Insercion Binaria:"<<endl<<endl;
for(int i=0;i<n;i++){
cout<<IB.vector[i]<<" ";
}
system("pause>null");
}
InsercionBinaria.h
#include <iostream>
#include <windows.h>
using namespace std;
class InsercionBinaria{
public:
int vector[100],i,j,aux,izq,der,m;
void insercionBinaria(int[], int );
void mostrar(int[], int );
};
void InsercionBinaria::insercionBinaria(int V[],int N){
for(i=1;i<N;i++){
aux = V[i];
izq=0;
der=i-1;
while(izq<=der){
m=((izq+der)/2);
if (aux<V[m])
der=m-1;
else
izq=m+1;
}
j=i-1;
while(j>=izq){
V[j+1]=V[j];
j=j-1;
}
V[izq]=aux;
}
}
void InsercionBinaria::mostrar(int V[],int N){
for(int i=0;i<N;i++){
cout<<V[i]<<" ";
}
}
descarga el código fuente desde aquí.



