@Override
    public void sort(List<String> list) {
        List<String>[] bucket = createBucket();
        int size = list.size();
        for ( int i = 0 ; i < size ; i ++ ) {
            String text = list.get(i);
            int hash = hash(text);
            boolean arrayNotFound = bucket[hash] == null;
                if ( arrayNotFound ) {
                    bucket[hash] = new ArrayList<String>();
            }
            bucket[hash].add(text);
        }

        int bucketSize = bucket.length;
        int writeCount = 0;
        for ( int i = 0 ; i <  bucketSize ; i ++ ) {
            List<String> hashedList = bucket[i];
            if ( hashedList == null ) {
                continue;
            }

            INSERTION_SORTER.sort(hashedList);

            int hashedListCount = hashedList.size();
            for ( int j = 0 ; j < hashedListCount ; j ++ ) {
                list.set(writeCount, hashedList.get(j));
                writeCount ++;
            }
        }
    }