Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1.  
  2. int size = 256;
  3. int arr[] = new int[size];
  4.  
  5. int w;
  6. int RUN = 32;
  7.  
  8. class mem{
  9.  
  10.  
  11. int memarr[] = new int[size];
  12. int c = color(255);
  13.  
  14. mem(){
  15.  
  16. for(int i = 0; i < size; i++)
  17. memarr[i] = arr[i];
  18.  
  19. }
  20.  
  21.  
  22. }
  23.  
  24. ArrayList<mem> stages = new ArrayList<mem>();
  25.  
  26. void insertionSort(int array[], int left, int right) {
  27.  
  28. for (int i = left + 1; i <= right; i++) {
  29. int temp = array[i];
  30. int j = i - 1;
  31. while (j >= left && array[j] > temp){
  32. array[j+1] = array[j];
  33. j--;
  34.  
  35. stages.add(new mem());
  36.  
  37. }
  38. array[j+1] = temp;
  39. }
  40.  
  41. }
  42.  
  43. void merge(int array[], int l, int m, int r)
  44. {
  45. int len1 = m - l + 1;
  46. int len2 = r - m;
  47. //print(len1 + " " + len2);
  48. int left[] = new int[len1];
  49. int right[] = new int[len2];
  50. for (int i = 0; i < len1; i++)
  51. left[i] = array[l + i];
  52. for (int i = 0; i < len2; i++)
  53. right[i] = array[m + 1 + i];
  54.  
  55. int i = 0;
  56. int j = 0;
  57. int k = l;
  58.  
  59. while (i < len1 && j < len2)
  60. {
  61. if (left[i] <= right[j])
  62. {
  63. array[k] = left[i];
  64. i++;
  65. }
  66. else
  67. {
  68. array[k] = right[j];
  69. j++;
  70. }
  71. k++;
  72. stages.add(new mem());
  73. }
  74.  
  75. while (i < len1)
  76. {
  77. array[k] = left[i];
  78. k++;
  79. i++;
  80. stages.add(new mem());
  81. }
  82.  
  83.  
  84. while (j < len2)
  85. {
  86. array[k] = right[j];
  87. k++;
  88. j++;
  89. stages.add(new mem());
  90. }
  91. }
  92.  
  93. void timSort(int array[], int n)
  94. {
  95. for (int i = 0; i < n; i+=RUN)
  96. insertionSort(array, i, min((i+31), (n-1)));
  97.  
  98. for (int sizey = RUN; sizey < n; sizey = 2*sizey)
  99. {
  100.  
  101. for (int left = 0; left < n; left += 2*sizey)
  102. {
  103.  
  104. int mid = left + sizey - 1;
  105. print((left + 2*sizey - 1));
  106. print(" ");
  107. print(n-1);
  108. print(" ");
  109. print(mid);
  110. print("\n");
  111. int right = min((left + 2*sizey - 1), (n-1));
  112.  
  113.  
  114. merge(array, left, mid, right);
  115. }
  116. }
  117. }
  118.  
  119. void setup(){
  120.  
  121. size(1024,700);
  122. background(0);
  123. int r, temp;
  124.  
  125. for(int i = 0; i < size; i++)
  126. arr[i] = i + 1;
  127.  
  128. for(int i = 0; i < size; i++){
  129. r = floor(random(size));
  130. temp = arr[r];
  131. arr[r] = arr[i];
  132. arr[i] = temp;
  133. }
  134.  
  135. w = width/size;
  136.  
  137. timSort(arr,size);
  138.  
  139. frameRate(240);
  140.  
  141. }
  142.  
  143. int stage = 0;
  144.  
  145. void draw(){
  146.  
  147. background(0);
  148. strokeWeight(1);
  149. stroke(127);
  150. fill(255);
  151. translate(0,height);
  152.  
  153. for(int i = 0; i < size; i++)
  154. rect(i*w,0,w,-float(stages.get(stage).memarr[i])/float(size)*height);
  155.  
  156. if(stage < stages.size() - 1)
  157. stage += 1;
  158.  
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement