//函數輸入:指標a,下界編號lbnd,上界編號ubnd,比較規則cp
//函數輸出:比較結果cmp
int cmp(int *a,int lbnd,int ubnd,int cp){
int mbnd;
if(lbnd==ubnd){//下界編號-上界編號==0:人數只有1個
return *(a+lbnd);//直接輸出
}else if(lbnd>ubnd){//下界編號-上界編號>0:直接交換下界編號與上界編號
return cmp(a,ubnd,lbnd,cp);
}else{
mbnd=(lbnd+ubnd)/2;//計算下界編號與上界編號的中間值
if(cp==1){//若大者優先
if(cmp(a,lbnd,mbnd,cp^1)>cmp(a,mbnd+1,ubnd,cp^1)){//比較規則變成小者優先:1^1=0
return cmp(a,lbnd,mbnd,cp^1);
}else{
return cmp(a,mbnd+1,ubnd,cp^1);
}
}else if(cp==0){//小者優先
if(cmp(a,lbnd,mbnd,cp^1)<cmp(a,mbnd+1,ubnd,cp^1)){//比較規則變成大者優先:0^1=1
return cmp(a,lbnd,mbnd,cp^1);
}else{
return cmp(a,mbnd+1,ubnd,cp^1);
}
}else{//兩個都不是
return 0;
}
}
}