Public classBitvectory {Private intcount; Private int[] A; Private Static Final intBit_len = 32; Private Static Final intMASK = 0x1f;//16 prohibit 10 binary Private Static Final intSHIFT = 5; PublicBitvectory (intcount) { This. Count =count; Init (count); } Private voidInitintcount) {a=New int[(count-1)/Bit_len + 1]; for(inti = 0; I < count; i++) {Clear (i); } } Private voidClearinti) {a[i>> SHIFT] &= ~ (1 << (I &MASK)); } // Public voidSetinti) {a[i>> SHIFT] |= (1 << (I &MASK)); } PublicList<integer>Getsortedarray () {List<Integer> list =NewArraylist<>(); StringBuilder s=NewStringBuilder (); for(inti = 0; I < count; i++) {s.append (Get (i)); if(Get (i) = = 1) {list.add (i); }} System.out.println (S.tostring ()); returnlist; } Private intGetinti) {returnInteger.bitcount (a[i >> SHIFT) & (1 << (I &MASK)); } Public Static voidMain (string[] args) {bitvectory bitvectory=NewBitvectory (38); List<Integer> list =NewArraylist<> (38); for(inti = 0; I < 38; i++) {List.add (int) (Math.random () * 36)); } List.foreach (E-{Bitvectory.set (e); }); List<Integer> Sortedarray =Bitvectory.getsortedarray (); System.out.println (Sortedarray.size ()+ "\ T" +Sortedarray); System.out.println (integer.tobinarystring (bitvectory.a[0])); System.out.println (bitvectory.a.length); System.out.println (arrays.tostring (BITVECTORY.A)); }}
Use bit vectors to sort 0-n data n/mask + an array A to represent these numbers
Java bit vector