Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin
El algoritmo trabaja de la siguiente forma:
Elegir un elemento de la lista de elementos a
ordenar, al que llamaremos pivote.
Resituar los dems elementos de la lista a cada
lado del pivote, de manera que a un lado queden
todos los menores que l, y al otro los mayores.
Los elementos iguales al pivote pueden ser
colocados tanto a su derecha como a su
izquierda, dependiendo de la implementacin
deseada. En este momento, el pivote ocupa
exactamente el lugar que le corresponder en la
lista ordenada.
La lista queda separada en dos sublistas, una
formada por los elementos a la izquierda del
pivote, y otra por los elementos a su derecha.
Repetir este proceso de forma recursiva para
cada sublista mientras stas contengan ms de un
elemento. Una vez terminado este proceso todos
los elementos estarn ordenados.
Como se puede suponer, la eficiencia del algoritmo
depende de la posicin en la que termine el pivote
elegido.
En el mejor caso, el pivote termina en el centro
de la lista, dividindola en dos sublistas de
igual tamao. En este caso, el orden de
complejidad del algoritmo es O(nlog n). Silvi
esto esta entero bueno.
Cdigo Secuencial
quick.cpp
// Funcin para dividir el array y hacer los intercambios
int divide(int *array, int start, int end) {
int left;
int right;
int pivot;
int temp;
pivot = array[start];
left = start;
right = end;
Programa
qs_se.cpp
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "quick.cpp"
int main()
{
int const MAX = 100;
int arraySize;
clock_t start_time;
clock_t final_time;
double total_time;
start_time = clock();
int a[arraySize];
final_time = clock();
total_time = ((double)(final_time - start_time)) /
CLOCKS_PER_SEC;
return 0;
}
Cdigo Paralelo
#include <iostream.h>
#include <sys/time.h>
#include <mpi.h>
using namespace std;
}
int length = atoi(argv[1]);
// Create random data
srand(time(0));
int *data = new int[length];
all
int i;
for (i=0; i<length/size; i++)
data[i] = rand();
MPI_Status status;
// Send all of the data to processor 0
if (rank == 0) {
for (i=1; i<size; i++)
MPI_Recv(data+i*length/size, length/size, MPI_INT, i,
MPI_ANY_TAG, MPI_COMM_WORLD, &status);
}
else {
MPI_Send(data, length/size, MPI_INT, 0, 0,
MPI_COMM_WORLD);
}
// Time everything after exchange of data until sorting is
complete
timeval start, end;
gettimeofday(&start, 0);
// Do recursive quicksort starting at processor 0 and
spreading out recursive calls to other machines
int s;
int localDataSize =
length;
int pivot;
for (s=size; s > 1; s /= 2) {
if (rank % s == 0) {
MPI_Finalize();
}