雷德(Rader)算法:
假如使用A[I]存的是順序位序,而B[J]存的是倒位序。I<J的時候需要變序,I>J的時候就不用。
注意:倒位排序-對二進制而言。
倒位序 順序 二進制表示 倒位序順序
0 0 000 000
4 1 100 001
2 2 010 010
6 3 110 011
1 4 001 100
5 5 101 101
3 6 011 110
7 7 111 111
由上面的表可以看出,按自然順序排列的二進制數,其下面一個數總是比其上面一個數大1,即下面一個數是上面一個數在最低位加1並向高位進位而得到的。而倒位序二進制數的下面一個數是上面一個數在最高位加1並由高位向低位進位而得到。
I、J都是從0開始,若已知某個倒位序J,要求下一個倒位序數,則應先判斷J的最高位是否爲0,這可與k=N/2相比較,因爲N/2總是等於100..的。如果k>J,則J的最高位爲0,只要把該位變爲1(J與k=N/2相加即可),就得到下一個倒位序數;如果K<=J,則J的最高位爲1,可將最高位變爲0(J與k=N/2相減即可)。然後還需判斷次高位,這可與k=N\4相比較,若次高位爲0,則需將它變爲1(加N\4即可)其他位不變,既得到下一個倒位序數;若次高位是1,則需將它也變爲0。然後再判斷下一位。。。。
由上面的表可以看出,按自然順序排列的二進制數,其下面一個數總是比其上面一個數大1,即下面一個數是上面一個數在最低位加1並向高位進位而得到的。而倒位序二進制數的下面一個數是上面一個數在最高位加1並由高位向低位進位而得到。
I、J都是從0開始,若已知某個倒位序J,要求下一個倒位序數,則應先判斷J的最高位是否爲0,這可與k=N/2相比較,因爲N/2總是等於100..的。如果k>J,則J的最高位爲0,只要把該位變爲1(J與k=N/2相加即可),就得到下一個倒位序數;如果K<=J,則J的最高位爲1,可將最高位變爲0(J與k=N/2相減即可)。然後還需判斷次高位,這可與k=N\4相比較,若次高位爲0,則需將它變爲1(加N\4即可)其他位不變,既得到下一個倒位序數;若次高位是1,則需將它也變爲0。然後再判斷下一位。。。。