Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- public class Naloga1 {
- static int N, asnCounter, compCounter;
- static int[] arr;
- static int[][] masks = {{0x000000FF, 0}, {0x0000FF00, 8}, {0x00FF0000, 16}, {0xFF000000, 24}};
- /*
- * UTILS:
- * - printArr(arr) : prints the elemnts of the array arr
- * - swap(arr,idx1,idx2) swaps elements of array with indicies idx1 and idx2
- */
- public static void printStats() {
- System.out.printf("%d %d\n",compCounter,asnCounter-3);
- asnCounter = 0; compCounter = 0;
- }
- public static void printArr(int[] arr){
- for(int i=0;i<arr.length;System.out.print(arr[i]+" "),i++);
- System.out.printf("\n");
- }
- public static void printArr(int[] arr,int i,int j){
- for(;i<=j;System.out.print(arr[i]+" "),i++);
- System.out.printf("\n");
- }
- public static void swap(int[] arr, int index1, int index2) {
- int temp = arr[index1];
- arr[index1] = arr[index2];
- arr[index2] = temp;
- }
- public static void countingsort(int[] arr, boolean up, boolean trace) {
- int[] sortedArr = new int[N];
- int[] count = new int[256];
- int[] newPos = new int[N];
- int[] finPos = new int[N];
- for(int i = 0; i < arr.length;count[arr[i]]++, i++);
- for(int i = 1; i < count.length;count[i] += count[i - 1], i++);
- if(trace) printArr(count);
- for(int i = N - 1; i >= 0; i--) {
- newPos[i] = count[arr[i]];
- sortedArr[newPos[i] - 1] = arr[i];
- finPos[N-i-1] = (newPos[i]-1);
- count[arr[i]]--;
- }
- printArr(finPos);
- printArr(sortedArr);
- }
- public static int[] countsort(int[] arr, int[] mask, boolean up, boolean trace) {
- int[] sortedArr = new int[arr.length];
- int[] count = new int[256];
- int[] newPos = new int[N];
- int[] finPos = new int[N];
- for(int i = 0; i < arr.length; i++) count[(arr[i] & mask[0]) >> mask[1]]++;
- for(int i = 1; i < count.length; i++) count[i] += count[i - 1];
- if(trace) printArr(count);
- for(int i = arr.length - 1; i >= 0; i--) {
- int value = (arr[i] & mask[0]) >> mask[1];
- newPos[i] = count[value];
- sortedArr[newPos[i] - 1] = arr[i];
- finPos[N-i-1] = (count[value]-1);
- count[value]--;
- }
- printArr(finPos);
- return sortedArr;
- }
- public static int[] radixsort(int[] arr, boolean up, boolean trace) {
- for(int maskIndex = 0; maskIndex < masks.length; maskIndex++) {
- arr = countsort(arr, masks[maskIndex], up, trace);
- if(true){printArr(arr);}
- }
- return arr;
- }
- public static void demoRaddix(int[] arr, boolean up, boolean trace) {
- radixsort(arr,up,trace);
- }
- public static void main(String[] args) {
- Scanner cin = new Scanner(System.in);
- String tmp;
- boolean up, trace;
- tmp = cin.next();
- trace = tmp.equals("trace");
- tmp = cin.next();
- tmp = cin.next();
- up = tmp.equals("up");
- N = cin.nextInt();
- arr = new int[N];
- for(int i=0;i<N;arr[i] = cin.nextInt(), i++);
- demoRaddix(arr,up,trace);
- cin.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement