I don't buy the Mainstream suggestions - like not making your own sorting routines (all the time) there are definate reasons why people say this. I also know writing your own sorting routines is a good learning exercise.
Depending on the sort you wish to accomplish - there are various ways to do it "Faster" than bubble sort - but frankly - bubble sort - though not the fastest - might be all you need.
Another one that I think is actually fun to write is when you have a list of integers - and this list is in the range of the array size - you do (dunno real name) halving... Where rather then check every location - you check if the value falls above or below the middle mark. Then you do the same in the "Half" of the array you just determined the value should go - then again. (This might not make sense from what I'm saying but...)
In short - Linker Errors? Yes they are a pain. You should know how to use STDLIB if possible ...sure.
Not write your routines? BAH - I think we all should try are hand at home dynamic arrays, double linked lists, sorting algorythms, scripting/compilers etc... it helps make you a better coder and helps you understand what other people likely did in the libraries you may call - such as stdlib! Keep At it man!