You should definitely read the relevant sections of Sedgewick's Algorithms
book. (See the algorithms exercises.)
Remember that running times relate to the algorithm's performance on
all inputs of size N. For most algorithms, there will be special cases
in which the running time will be extremely fast.
Although average-case is usually what we care most about, it is sometimes
difficult to calculate, since we may not know enough about what the input
will actually be.
Try to get a feel for the difference between order N, order N2, order
N log N, and order 2N
(or exponential) algorithms.
We generally consider algorithms which run in polynomial time to be
efficient.
Sorry I haven't written too much here, but the Algorithms book really
provides an excellent discussion, much better than anything I could attempt.