Advertisement
Guest User

Untitled

a guest
Feb 14th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. import java.util.*;
  2. public class verkefni1 {
  3.  
  4. public static void main( String[] args ){
  5. Random rng = new Random();
  6. long avgASpeed = 0;
  7. long avgBSpeed = 0;
  8. long avgCSpeed = 0;
  9. int myK = 0;
  10. long startTime;
  11. long endTime;
  12. long[] myAverageTimes = new long[200];
  13. int ktimes = 10; //How many times for average
  14. int h = 20000; //Number of integers
  15. double[] A = new double[h]; //Random numbers from 0 to A.length.
  16. double[] B = new double[h]; //0 sqrt(n) times, 1 sqrt(n) times, ... sqrt(n) sqrt(n) times.
  17. double[] C = new double[h]; //Almost ordered array.
  18.  
  19. // MEÐALTAL MARGRA TILRAUNA.
  20. // for(myK = 0; myK<200; myK++){
  21. // for(int g = 0; g<ktimes; g++){
  22. // //Making A
  23. // for(int i = 0; i<A.length; i++){
  24. // A[i] = i;
  25. // }
  26. // shuffleArray(A);
  27. //
  28. // //A
  29. // long startTime = System.nanoTime();
  30. // QuickSort(A, 0, A.length-1, myK);
  31. // long endTime = System.nanoTime();
  32. // avgASpeed += (endTime - startTime);
  33. //
  34. // }
  35. // avgASpeed = avgASpeed / ktimes;
  36. // myAverageTimes[myK] = avgASpeed;
  37. // avgASpeed = 0;
  38. // }
  39. // for(int i = 0; i<200; i++){
  40. // System.out.print(myAverageTimes[i]+", ");
  41. // }
  42. // for(myK = 0; myK<200; myK++){
  43. // for(int g = 0; g<ktimes; g++){
  44. // //Making B
  45. // int innerk = 0;
  46. // int innern = 1;
  47. // for(int i = 0; i<B.length; i++){
  48. // if(i>=innern*Math.sqrt(B.length)){
  49. // innern++;
  50. // innerk++;
  51. // }
  52. // B[i] = innerk;
  53. // }
  54. // shuffleArray(B);
  55. // //B
  56. // startTime = System.nanoTime();
  57. // QuickSort(B, 0, B.length-1, myK);
  58. // endTime = System.nanoTime();
  59. // avgBSpeed += (endTime - startTime);
  60. // }
  61. // avgBSpeed = avgBSpeed / ktimes;
  62. // myAverageTimes[myK] = avgBSpeed;
  63. // avgBSpeed = 0;
  64. // }
  65. // for(int i = 0; i<200; i++){
  66. // System.out.print(myAverageTimes[i]+", ");
  67. // }
  68. for(myK = 0; myK<200; myK++){
  69. for(int g = 0; g<ktimes; g++){
  70. //Making C
  71. for(int i = 0; i<C.length; i++){
  72. C[i] = i;
  73. }
  74. for(int i = 0; i< (int)Math.round(Math.log(C.length)/Math.log(2)); i++){
  75. int rng1 = rng.nextInt(C.length); //Random number 0 - C.length
  76. int rng2 = rng.nextInt(C.length);
  77. swap(C, rng1, rng2);
  78. }
  79. //C
  80. startTime = System.nanoTime();
  81. QuickSort(C, 0, C.length-1, myK);
  82. endTime = System.nanoTime();
  83. avgCSpeed += (endTime - startTime);
  84. }
  85. avgCSpeed = avgCSpeed / ktimes;
  86. myAverageTimes[myK] = avgCSpeed;
  87. avgCSpeed = 0;
  88. }
  89. for(int i = 0; i<200; i++){
  90. System.out.print(myAverageTimes[i]+", ");
  91. }
  92.  
  93. }
  94.  
  95. //InsertionSort from CLRS
  96. public static void InsertionSort( double[] A, int p, int r ){
  97. int j;
  98. for(j = p+1; j <= r; j++){
  99. double key = A[j];
  100. int i = j-1;
  101. while(i > 0 && A[i] > key){
  102. A[i+1] = A[i];
  103. i -= 1;
  104. }
  105. A[i+1] = key;
  106. }
  107. }
  108.  
  109. //QuickSort from CLRS
  110. public static void QuickSort( double[] A, int p, int r, int k ){
  111. if( p < r ){
  112. if(r-p <= k){
  113. InsertionSort(A, p, r);
  114. }
  115. else{
  116. int q = Partition(A, p, r);
  117. QuickSort(A, p, q-1, k);
  118. QuickSort(A, q+1, r, k);
  119. }
  120. }
  121. }
  122.  
  123. //Partition process
  124. public static int Partition( double[] A, int p, int r ){
  125. double x = A[r];
  126. int i = p-1;
  127. for(int j = p; j <= r-1; j++){
  128. if( A[j] <= x){
  129. i = i+1;
  130. swap(A, i, j);
  131. }
  132. }
  133. swap(A, i+1, r);
  134. return i+1;
  135. }
  136.  
  137. //Helper function swap
  138. public static void swap( double[] a, int i, int j){
  139. double k = a[i];
  140. a[i] = a[j];
  141. a[j] = k;
  142. }
  143.  
  144. //Helper function shuffle
  145. // Implementing Fisher–Yates shuffle
  146. public static void shuffleArray(double[] ar)
  147. {
  148.  
  149. Random rnd = new Random();
  150. for (int i = ar.length - 1; i > 0; i--)
  151. {
  152. int index = rnd.nextInt(i + 1);
  153. // Simple swap
  154. double a = ar[index];
  155. ar[index] = ar[i];
  156. ar[i] = a;
  157. }
  158. }
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement