O resultado deixa claro que a lógica do segundo bloco de código está incorreta:
if(x[i] < x[j]){
int aux = x[j]; // Atribui o valor de x[j] para uma variável auxiliar
x[i] = aux; // Atribui o valor da variavel auxiliar, ou seja, x[j] para x[i]. Como o valor de x[i] não foi salvo em outra variável antes dessa operação ele é perdido
x[j] = x[i]; // Essa atribuição é inútil, pois, antes dela, x[i] é igual a aux que é igual a x[j], ou seja, x[j] já é igual a x[i]
}
davidbuzatto
Não vi seu algoritmo com calma, mas olhando pelo seu if está claro porque não funciona. Preste atenção no que você está fazendo dentro do if.