聘我网

新概念招聘3.0

对含5个整型的数组排序

vote up0vote downstar
void order5(int *arr) {
    int *a,*b,*c,*d,*e;
    a=arr,b=arr+1,c=arr+2,d=arr+3,e=arr+4;
    L1: if(*a >*b){*a^=*b;*b^=*a;*a^=*b;}
    L2: if(*b >*c){*b^=*c;*c^=*b;*b^=*c;goto L1;}
    L3: if(*c >*d){*c^=*d;*d^=*c;*c^=*d;goto L2;}
        if(*d >*e){*d^=*e;*e^=*d;*d^=*e;goto L3;}
}

我擦,这段代码居然能work,什么原理?

 

1 个答复

vote up0vote downcheck

就是一段冒泡排序。

有段奇技淫巧:

*a^=*b;*b^=*a;*a^=*b;

作用就是交换ab的值,因为有这个恒等式:

x^y^y = x;
链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.