The semismooth algorithm for large scale complementarity problems