I can't think of a single call you can make, but there are lots of 'points of interest'. First tip, don't sort an array of strings - sort a contiguous array of pointers to the strings. This means whatever shifting you do just involves moving bits of the array around, not reallocating strings. With that in place, there are standard sorting routines you can use. The venerable qsort from the C library works great, though it requires you to set up a 'global' callback. Maybe this could be a static member in C++ if you want to mix. Inside the comparison callback, its up to you to decide what the order will be - retuning essentially what a strcmp or stricmp returns. It turns out that there is more than one implementation for the string comparison functions in VC - there is straight C code, and there is much faster 286 code in the Crt\Intel include dir. (I say '286 code' because I think some of this could be even faster with the string ops of a 386 + proc when dealing with big strings). If you've got control over what proc you are targeting, even a basic framework like this can be way fast, depending of course on the size and similarity of the strings. STL gurus will probably flame me for this, but it is durn quick! :)