#include <stdio.h>

int getbit (int n, int i){
  return (n>>i)%2;
}
void afficher(int n,int t[]){
  int i=0;
  for(;i<n;i++){
    printf("%d",t[i]);
  }printf("\n");
}
int separe(unsigned int i, int j, int t[], int x){
  int temp = 0;
  int k = i;
  int l = i;

  for( ; k <= j ; k++){
    if(getbit(t[k],x)==0){
      temp=t[k];
      t[k]=t[l];
      t[l]=temp;
      l++;
    }
  }
  return l;
}
int* concatener(int n,int tg[],int m,int td[]){
  int res[n+m];int i=0;
  for(;i<n;i++){
    res[i]=tg[i];
  }
  for(;i<n+m;i++){
    res[i]=td[i-n];
  }
  return res;
}
int* trie(int n, int t[], int x){
  int frontiere=separe(0,n,t,x);int i=0;int tg[separe];int td[n-separe];
  if(n==1)return t;
  else{
    for(;i<frontiere;i++){
      tg[i]=t[i];
      td[i]=t[i+frontiere];
    }
    return concatener(separe,trie(separe,tg),n-separe,trie(n-separe,td));
  }
}

int main(){
  int n=5;
  int f[6]={5,1,3,2,0,4};
  printf("le bit numéro 2 de %d est %d\n",n,getbit(n,2));
  printf("Sépare : %d\n",separe(0,5,f,0));
  afficher(6, f);
  afficher(6,trie(6,f,32));
}

