Stando all'algoritmo che intendi usare (un bubble-sort), l'indice del for più interno dovrebbe partire dall'attuale valore dell'indice del for più esterno. L'algoritmo, infatti, ad ogni iterazione del for più esterno, porta verso sinistra il valore "più piccolo"... non ha senso, quindi, confrontare gli elementi già ordinati.

codice:
for(int j=i;j<k.length();j++){
Questo per quanto concerne la logica dell'algoritmo.

E' chiaro che, per poter funzionare, è necessario che i confronti vengano fatti sull'array ordinato e non sulla stringa, che, essendo immutabile e non venendo mai toccata, non viene di certo ordinata. Quindi dovresti effettuare i confronti usando l'array "ordinato" e non i caratteri provenienti da "k.charAt(...)"... proprio perchè tu non modifichi la stringa "k".

codice:
if(ordinato[i]>ordinato[j]){
Ciao.