martes, 31 de enero de 2012

QuickSort

Algoritmo para ordenar un vector. Método mediante Divide y Vence realizado en C. Espero que sea útil!!

#include <cstdlib>
#include <iostream>
#define max 100
using namespace std;
void swap(int *x,int *y)
{
   int temp;
   temp = *x;
   *x = *y;
   *y = temp;
}
int pivote(int i,int j )
{
   return((i+j) /2);
}
void quicksort(int list[],int m,int n)
{
   int key,i,j,k;
   if( m < n)
   {
      k = pivote(m,n);
      swap(&list[m],&list[k]);
      key = list[m];
      i = m+1;
      j = n;
      while(i <= j)
      {
         while((i <= n) && (list[i] <= key))
                i++;
         while((j >= m) && (list[j] > key))
                j--;
         if( i < j)
                swap(&list[i],&list[j]);
      }
      swap(&list[m],&list[j]); //Intercambiar elementos
      quicksort(list,m,j-1); //Llamadas recursivas para ordenar la primera mitad
      quicksort(list,j+1,n); //Llamada ercursiva para ordenar la segunda mitad
   }
}
void printlist(int list[],int n)
{
   int i;
   for(i=0;i<n;i++){
      cout<< list[i]<<"\t";
      }
      cout<<endl<<endl;
}
int main(int argc, char *argv[])
{
   int n;
   int list[max];
   int i = 0;
   cout<<"Introduce el número de elementos del vector :"<<endl;
   cin>>n;
  
   for(i=0;i<n;i++)
   {
       cout<<" list["<<i+1<<"]=";
       cin>>list[i];
   }
   cout<<"El vector introducido es:"<<endl;
   printlist(list,n);
  
 
   quicksort(list,0,n-1); //ordenar la lista
  
   cout<<"El vector ordenado mediante el método quicksort es:"<<endl;
   printlist(list,n); //imprimir la lista
   system ("pause");
   return EXIT_SUCCESS;
}

No hay comentarios:

Publicar un comentario