hi i need to write sucj kind of sorting maybe it is similary to radix sort and also (this is not homework because i created it problem myself and please if anobody can help me) problem is like this suppose i have array int x[]=new int[]{4,5,3,2,1}; let write it into binary form 5 -0101 4- 0100 3-0011 2-0010 1-0001 i want to sort this elements by using bitwise operatos or check each bit and if less exchange it can anybody help me for example take 5 and 4 check first rightmost bit 0==0 so continue in the 1 index also 1==1 next the same 0=0 and last one 1>0 it means that first element is greater then second so exchange it
Paraphasing:
I need to create a sort similar to radix.
Suppose I have an array:
int x[] = new int[] {4, 5, 3, 2, 1};
Or, in binary form:
5-0101 4-0100 3-0011 2-0010 1-0001
I want to sort these elements by using bitwise operators or check each bit and (if less) exchange it. For example, consider 5 and 4:
The leftmost or most significant bit (MSB) of 5 in binary is 0, as is the MSB of 4. Since
0 == 0
the process continues. The next two bits (0 then 1) are also equivalent开发者_StackOverflow社区. Finally the rightmost or least significant bit (LSB) of 5 is 1 whereas the LSB of 4 is 0, indicating that the two values should be exchanged.
To get the k
-th bit of an int x
, you can do the following:
int bit = (x >> k) & 1;
Here's a test harness:
int xs[] = {4,5,3,2,1};
for (int k = 0; k < 4; k++) {
for (int x : xs) {
int bit = (x >> k) & 1;
System.out.format("|%s| ", bit);
}
System.out.println();
}
This prints (with annotation)
x= 4 5 3 2 1 k=
|0| |1| |1| |0| |1| 0
|0| |0| |1| |1| |0| 1
|1| |1| |0| |0| |0| 2
|0| |0| |0| |0| |0| 3
The tricky bit here is the sign bit, i.e. bit 31 on an int
. When it's 1
, it signifies a negative number. You may want to first have an implementation that only works for positive int
, and then add support for negative number later.
See also
- Wikipedia/Two's complement
精彩评论