What is the algorithm for generating a Ripple address from a ecdsa public key? I know it is some combination of sha256 and ripemd160 that is used on the public key component to obtain the Ripple wallet address, but what is the specific algorithm?
The process of going from a Ripple secret to a specific ECDSA private/public key (which you didn't ask about but I included it here anyway) is documented on the Account Family wiki page.

From a ECDSA public key, {X,Y}, you do ripemd160(sha256(CompressPoint(X,Y)).
That's then encoded in base58 (using the Ripple alphabet/dictionary).

You can also look at the rippled implementation or a Go implementation.