Ayuda con ordenamiento quicksort

Hola, este es mi primer tema así que no sé si está en el lugar adecuado.... En fin, mi pregunta para ustedes es sobre un algoritmo de ordenamiento que estoy haciendo. Lo que pasa es que estoy haciendo el quicksort aplicándolo a un arraylist de Strings; lo he probado con una lista int x[] y todo sale bien, pero al adaptarlo al arraylist, se daña... Aqui pongo el codigo para ambos casos y lo que me sale
http://www.javamexico.org/system/files/Codigo_0.txt

Tengo un arraylist con estos datos
arrayList.add("eeee");
arrayList.add("dddd");
arrayList.add("aaaa");
arrayList.add("bbbb");
arrayList.add("ffff");

Y ordenandolo sale esto

[aaaa, aaaa, aaaa, eeee, eeee]

Ayuda!!!!

         public void quiksort(ArrayList array,int lo,int ho)
          {
            String temp="";
            String temp2="";
                 int l=lo, h=ho;
            String pivote="";
         
            if(ho>lo)
            {
                int dentpivote=(lo+ho)/2;
                pivote=array.get(dentpivote).toString();
              while(l<h)
              {
                while((l<ho)&&(array.get(l).toString().compareToIgnoreCase(pivote)<0))  ++l;
                while((h>lo)&&(array.get(h).toString().compareToIgnoreCase(pivote)>0))  --h;
                if(l<=h)
                {
                  temp = array.get(l).toString();
                  temp2 = array.get(h).toString();
                  array.remove(h);
                  array.remove(l);
                  array.add(l,temp2);
                  array.add(h,temp);
                  ++l;
                  --h;
                }
              }
         
              if(lo<h) quiksort(array,lo,h);
              if(l<ho) quiksort(array,l,ho);
            }
          }
         public void quiksort(int x[],int lo,int ho)
          {
            int t, l=lo, h=ho, mid;
         
            if(ho>lo)
            {
              mid=x[(lo+ho)/2];
              while(l<h)
              {
                while((l<ho)&&(x[l]<mid))  ++l;
                while((h>lo)&&(x[h]>mid))  --h;
                if(l<=h)
                {
                  t    = x[l];
                  x[l] = x[h];
                  x[h] = t;
                  ++l;
                  --h;
                }
              }
         
              if(lo<h) quiksort(x,lo,h);
              if(l<ho) quiksort(x,l,ho);
            }
          }
AdjuntoTamaño
Codigo.txt1.32 KB

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de bferro

Ordrnamiento con quicksort

En el momento que haces el intercambio entre las dos cadenas, necesitas asegurar que si l ==h, la eliminación y la inserción se realice una sola vez:

temp = array.get(l).toString();
                    System.out.println(temp + l);
                    temp2 = array.get(h).toString();
                    System.out.println(temp2 + h);
                    array.remove(h);
                    array.add(h, temp);
                    if (l != h) {
                        array.remove(l);
                        array.add(l, temp2);
                    }