Guest User

Untitled

a guest
Apr 20th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. package org.eda.actividad02.ejercicio01;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Comparator;
  5.  
  6. import org.eda.estructurasdatos.Heap;
  7.  
  8. public class HeapSort<T> {
  9.  
  10. public static <T> void sortHeap(ArrayList<T> scores1, Comparator<T> comp) {
  11. int cap = scores1.size();
  12. Heap<T> monticulo = new Heap<T>(cap, comp);
  13. for(int i = 0; i<cap; i++){
  14. monticulo.add(scores1.get(i));
  15. }
  16. for(int i = 0; i<cap; i++){
  17. scores1.set(i, monticulo.removeMin());
  18. }
  19. }
  20.  
  21. public static <T> void heapSort(ArrayList<T> scores2, Comparator<T> comp) {
  22. makeHeap(scores2, comp);
  23. }
  24.  
  25. public static <T> void makeHeap(ArrayList<T> lista, Comparator<T> comp){
  26. for (int i = lista.size() / 2; i >= 0; i--) {
  27. siftDown(lista, i, comp);
  28. }
  29. T elem;
  30. for (int i = lista.size(); (i > 1); i--) {
  31.  
  32. swap(lista,0,i-1);
  33. siftDown(lista, 0,comp);
  34. }
  35. for (int i = 0; (i < lista.size() / 2); i++) {
  36. swap(lista, i, (lista.size()-i-1));
  37. }
  38. }
  39.  
  40. protected static <T> void siftDown(ArrayList<T> lista, int primero, Comparator<T> comp) {
  41. int parent = primero;
  42. int child = (parent << 1) + 1;
  43. while (child < lista.size()) {
  44. if (child < lista.size() - 1
  45. && comp.compare(lista.get(child), lista.get(child + 1)) > 0)
  46. child++;
  47. if (comp.compare(lista.get(child), lista.get(parent)) >= 0) {
  48. break;
  49. }
  50. swap(lista, parent, child);
  51. parent = child;
  52. child = (parent << 1) + 1;
  53. }
  54. }
  55.  
  56. private static <T> void swap(ArrayList<T> lista, int parent, int child) {
  57. T auxiliar = lista.get(parent);
  58. lista.set(parent, lista.get(child));
  59. lista.set(child, auxiliar);
  60. }
  61.  
  62. }
Add Comment
Please, Sign In to add comment