You are on page 1of 1

/*

* Complete the function below.


*/

// Counts the number of ones in the binary representation of number


static int numonebinary(int number) {
int count = 0;
while (number != 0) {
number = number & (number - 1);
count++;
}
return count;
}

static int[] rearrange(int[] elements) {


long[] numones = new long[elements.length];
long[] entries = new long[elements.length];
for (int i = 0; i < elements.length; i++) {
numones[i] = numonebinary(elements[i]);
entries[i] = elements[i] + numones[i] * 1000000000;
}
Arrays.sort(entries);
Arrays.sort(numones);
for (int i = 0; i < elements.length; i++)
elements[i] = (int) (entries[i] - numones[i] * 1000000000);
return elements;
}

/* Works, but takes too long


static int[] rearrange(int[] elements) {
boolean sorted = false;
while (!sorted) {
sorted = true;
for (int j = 0; j < elements.length - 1; j++) {
if (numonebinary(elements[j]) > numonebinary(elements[j+1])) {
int temp = elements[j];
elements[j] = elements[j+1];
elements[j+1] = temp;
sorted = false;
}
if (numonebinary(elements[j]) == numonebinary(elements[j+1])) {
if (elements[j] > elements[j+1]) {
int temp = elements[j];
elements[j] = elements[j+1];
elements[j+1] = temp;
sorted = false;
}
}
}
}
return elements;
}
*/

You might also like