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í.