理解bitonic排序代码

时间:2016-10-23 20:52:32

标签: c++ c

以下用于bitonic排序的代码可以正常工作。我需要对最内层for循环中存在的代码进行一些解释。据我所知,逻辑是基于按升序和降序排列元素,交替形成2元素比特序列,4元素比特序列,8元素比特序列等。但我不明白代码是如何实现这一点的,特别是在交换之前的xor操作和if语句。

void bitonic_sort(int *data, int N)
{

    int i, j, k;
    int temp;

        for (k = 2;k <= N;k = 2 * k) 
        {
            for (j = k >> 1;j>0; j = j >> 1) 
            {
                for (i = 0;i<N;i++) 
                {
                    int ixj = i^j; 

                    if ((ixj)>i)
                    {
                        if ((i&k) == 0 && data[i] > data[ixj]) {
                            temp = data[i];
                            data[i] = data[ixj];
                            data[ixj] = temp;
                        }

                        if ((i&k) != 0 && data[i] < data[ixj]) {
                            temp = data[i];
                            data[i] = data[ixj];
                            data[ixj] = temp;
                        }

                    }
                }
            }
        }   

}

0 个答案:

没有答案