Sou nova na área de programação e estou aprendendo java, gostaria de saber como eu faço um código que compara mergesort com quicksort e coloca os resultados obtidos em um gráfico em java, alguém poderia me ajudar ?
O que você quer comparar? Tempo de processamento, memória, número de iterações, performance com várias CPUs/GPUs, em casos médios, pior caso?
Quick.java
[color=darkblue]
Um bom começo seria criar um timer, para ver quanto tempo cada uma das aplicações roda, depois crie um contador de iterações, veja quantas iterações cada um leva para ordenar um vetor de n posições, dai é só ir fazendo comparações
[/color]
[color=darkblue] Segue, apenas como um mero exemplo que você utilizar, mas adaptando as suas necessidades[/color]
Resolvendo imprecisões do timer
Resolvendo imprecisões do timer
Se você rodar esse algoritmo notará resultados bem melhores: a taxa gráfica varia, mas os UPSs sao quase constantes. Entretanto, ainda existe uma variação indesejada na atualização. Ela ocorre pois, conforme já explicado, o sleep() contém imprecisões. Podemos reduzir consideravelmente essa imprecisão calculando o tempo total de sleep, mais ou menos como fizemos para a fase de paint e update. Abaixo segue o código fazendo isso:
view sourceprint?
01.
long excess = 0;
02.
long noDelays = 0;
03.
final long DESIRED_UPDATE_TIME = 40;
04.
final long NO_DELAYS_PER_YIELD = 16;
05.
06.
long overSleepTime = 0;while (isRunning) {
07.
long beforeTime = System.currentTimeMillis();
08.
09.
//Pula os quadros enquanto o tempo for em excesso.
10.
11.
while (excess > DESIRED_UPDATE_TIME) {
12.
game.processLogics();
13.
excess -= DESIRED_UPDATE_TIME;
14.
}
15.
16.
game.processLogics();
17.
game.paintGraphics();
18.
19.
long afterTime = System.currentTimeMillis();
20.
long totalTime = afterTime - beforeTime;
21.
22.
if (totalTime < DESIRED_UPDATE_TIME) {
23.
sleep(DESIRED_UPDATE_TIME - totalTime - overSleepTime);
24.
long afterSleepTime = System.currentTimeMillis();
25.
overSleepTime = afterSleepTime - afterTime;
26.
noDelays = 0;
27.
}
28.
else {
29.
overSleepTime = 0;
30.
excess += totalTime - DESIRED_UPDATE_TIME;
31.
if (++noDelays == NO_DELAYS_PER_YIELD)
32.
Thread.yield();
33.
}
34.
}