Beruflich Dokumente
Kultur Dokumente
Trabalho de Investigao
Docente:
Incio Ticongolo
Discentes:
Ivan Ernesto
Ruy Alexandre Dombo
Wilton Baltazar
Kevin Faftine
Nuno Barbosa
Introduo
O presente trabalho vem debruar-se sobre Os Algoritmos de Ordenao, mais concretamente o
algoritmo de ordenao Quicksort, que basicamente um algoritmo que conhecido pelo lema de
dividir para conquistar.
Tem como objectivo explicar o funcionamento e oferecer um exemplo funcional do algoritmo acima
mencionado. Este trabalho est organizado em cinco partes que consistem, definio, como
realizada a organizao/escolha, conceito de Pivot e Diviso, complexidade do algoritmo, um
exemplo e por fim consideraes que devem ser tomadas no mbito da escolha deste algoritmo.
A metodologia utilizada foi a pesquisa bibliogrfica com bases na Internet.
Definio
Como j foi acima mencionado, Quicksort aquele que que divide um array em dois pequenos
arrays e por sua vez este faz a escolha/ordenao das duas pequenos arrays.
Para que isso seja possvel, vital que:
2. Segundo passo Posicionar os apontador de posio e iniciar a comparao, onde j foi dito
que o que menor que o elemento PIVOT se situa a esquerda e o que maior a direita.
3. Terceiro Passo - Uma vez que 5>3, trocar o apontador direito para esquerda e uma vez que
3 == 3, parar
6. Sexto-Passo Uma vez que 2<3 deslocar o apontador esquerdo e uma vez 4>3, parar.
Exemplo
public class QuickSort {
public static void main(String[] args) {
int[] x = { 9, 2, 4, 7, 3, 7, 10 };
printArray(x);
int low = 0;
int high = x.length - 1;
quickSort(x, low, high);
printArray(x);
}
public static void quickSort(int[] arr, int low, int high) {
if (arr == null || arr.length == 0)
return;
if (low >= high)
return;
//pick the pivot
int middle = low + (high - low) / 2;
int pivot = arr[middle];
//make left < pivot and right > pivot
int i = low, j = high;
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
//recursively sort two sub parts
if (low < j)
quickSort(arr, low, j);
if (high > i)
quickSort(arr, i, high);
}
public static void printArray(int[] x) {
for (int a : x)
System.out.print(a + " ");
System.out.println();
}
}
Desvantagens do Quicksort
H uma desvantagem de usar recurso para implementar o algoritmo Quicksort, no vai escalar,
porque JVM no tem otimizao de chamada de cauda, ele simplesmente vai crescer a pilha de
chamada de mtodo para algo proporcional matriz para classificar, e ele ir falhar para disposio
muito grande.
Concluso