If an app is written for Android 2.3 will it run on 2.1? If an app is written for Android 2.3 will it run on 2.1?
It depends.  If an application uses features present in Android 2.3, then it will not work on 2.2 or lower.  If it only uses features present in older versions, then it will work on those older versions.

For example, an app written for 2.1 (i.e., an app that only uses features from 2.1 or lower) will work on 2.1, 2.2, 2.3, 3.0, and 3.1 (and any future versions, unless Google changes how things work).