static void doubleQuickSort(double a[], int index[], int lo0, int hi0) {
        int lo = lo0;
        int hi = hi0;
        double mid;

        if ( hi0 > lo0) {

          
            mid = a[ ( lo0 + hi0 ) / 2 ];
      
            while( lo <= hi ) {
            
                while( ( lo < hi0 ) && ( a[lo] < mid )) {
                    ++lo;
                }

              
                while( ( hi > lo0 ) && ( a[hi] > mid )) {
                    --hi;
                }

           
                if( lo <= hi ) {
                    swap(a, index, lo, hi);
                    ++lo;
                    --hi;
                }
            }
          
            if( lo0 < hi ) {
                doubleQuickSort( a, index, lo0, hi );
            }
          
            if( lo < hi0 ) {
                doubleQuickSort( a, index,lo, hi0 );
            }
        }
    }