Advertisement
daskalot

Untitled

Apr 10th, 2019
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. import java.util.Scanner;
  2. public class Naloga1 {
  3. static int N, asnCounter, compCounter;
  4. static int[] arr;
  5. static int[][] masks = {{0x000000FF, 0}, {0x0000FF00, 8}, {0x00FF0000, 16}, {0xFF000000, 24}};
  6. /*
  7. * UTILS:
  8. * - printArr(arr) : prints the elemnts of the array arr
  9. * - swap(arr,idx1,idx2) swaps elements of array with indicies idx1 and idx2
  10. */
  11. public static void printStats() {
  12. System.out.printf("%d %d\n",compCounter,asnCounter-3);
  13. asnCounter = 0; compCounter = 0;
  14. }
  15. public static void printArr(int[] arr){
  16. for(int i=0;i<arr.length;System.out.print(arr[i]+" "),i++);
  17. System.out.printf("\n");
  18. }
  19. public static void printArr(int[] arr,int i,int j){
  20. for(;i<=j;System.out.print(arr[i]+" "),i++);
  21. System.out.printf("\n");
  22. }
  23. public static void swap(int[] arr, int index1, int index2) {
  24. int temp = arr[index1];
  25. arr[index1] = arr[index2];
  26. arr[index2] = temp;
  27. }
  28. public static void countingsort(int[] arr, boolean up, boolean trace) {
  29. int[] sortedArr = new int[N];
  30. int[] count = new int[256];
  31. int[] newPos = new int[N];
  32. int[] finPos = new int[N];
  33. for(int i = 0; i < arr.length;count[arr[i]]++, i++);
  34. for(int i = 1; i < count.length;count[i] += count[i - 1], i++);
  35. if(trace) printArr(count);
  36. for(int i = N - 1; i >= 0; i--) {
  37. newPos[i] = count[arr[i]];
  38. sortedArr[newPos[i] - 1] = arr[i];
  39. finPos[N-i-1] = (newPos[i]-1);
  40. count[arr[i]]--;
  41. }
  42. printArr(finPos);
  43. printArr(sortedArr);
  44. }
  45. public static int[] countsort(int[] arr, int[] mask, boolean up, boolean trace) {
  46. int[] sortedArr = new int[arr.length];
  47. int[] count = new int[256];
  48. int[] newPos = new int[N];
  49. int[] finPos = new int[N];
  50. for(int i = 0; i < arr.length; i++) count[(arr[i] & mask[0]) >> mask[1]]++;
  51. for(int i = 1; i < count.length; i++) count[i] += count[i - 1];
  52. if(trace) printArr(count);
  53. for(int i = arr.length - 1; i >= 0; i--) {
  54. int value = (arr[i] & mask[0]) >> mask[1];
  55. newPos[i] = count[value];
  56. sortedArr[newPos[i] - 1] = arr[i];
  57. finPos[N-i-1] = (count[value]-1);
  58. count[value]--;
  59. }
  60. printArr(finPos);
  61. return sortedArr;
  62. }
  63. public static int[] radixsort(int[] arr, boolean up, boolean trace) {
  64. for(int maskIndex = 0; maskIndex < masks.length; maskIndex++) {
  65. arr = countsort(arr, masks[maskIndex], up, trace);
  66. if(true){printArr(arr);}
  67. }
  68. return arr;
  69. }
  70. public static void demoRaddix(int[] arr, boolean up, boolean trace) {
  71. radixsort(arr,up,trace);
  72. }
  73. public static void main(String[] args) {
  74. Scanner cin = new Scanner(System.in);
  75. String tmp;
  76. boolean up, trace;
  77. tmp = cin.next();
  78. trace = tmp.equals("trace");
  79. tmp = cin.next();
  80. tmp = cin.next();
  81. up = tmp.equals("up");
  82. N = cin.nextInt();
  83. arr = new int[N];
  84. for(int i=0;i<N;arr[i] = cin.nextInt(), i++);
  85. demoRaddix(arr,up,trace);
  86. cin.close();
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement