雷德算法

14 篇文章 0 订阅

使用雷德算法实现倒位序:

        对于自然顺序(二进制)我们是在低位加 1 得到下一位数,对于倒位序我们是在高位加 1 向低位进位。比如已知一个倒位序数是J求其下一个倒位序数,N位总数 ,把J与N/2比较若J<N/2则J的最高位为 0 ,把最高位置 1 ,就得到了J的下一个倒位序数;若J>=N/2则说明J的最高位为1 ,把最高位置0 ,比较次高位,若次高位为0 ,则把次高位置1,得到J的下一个倒位序,若次高位为1  , 则把次高位置0,以此类推...

以N = 8 为例:

倒位数顺序                  倒位数                  十进制

    000                           000                          0

    001                           100                          4

    010                            010                         2

    011                            110                         6

    100                            001                         1

    101                            101                         5

    110                            011                         3

    111                            111                         7


使用算法实现:(当顺序位序小于到序位序要变序)

#include <iostream>
using namespace  std;

int x[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int y[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int N = 8;

int main()
{
	int i,j,k;
	int temp;

	for(j=0,i=0;i<N-1;i++)    //这里实现了奇偶前后分开排序
	{
		if(i<j)                        //如果i<j,即进行变址
		{
			temp = x[j];
			x[j]  = x[i];
			x[i]  = temp;
		}
		k = N/2;                 //求j的下一个倒位序
		while(j >= k)        //如果k<=j,表示j的最高位为1 
		{
			j = j-k;                 //把最高位变成0
			k = k/2;               //k/2,比较次高位,依次类推,逐个比较,直到某个位为0
		}
		j = j+k;                //把0改为
	}//for()

	for(i = 0 ; i < N ; ++ i)
	{
		printf("%2d      %2d\n" , i , x[i]) ;
	}

	system("pause") ;
	return 0 ;
}




    

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值