Koukám, že chceš psát v C++, ale píšeš to jako v C. Pokud se chceš opravdu C++ zabývat, začni tím, že si nastuduješ STL (Standard Template Library), konkrétně především kontejnery (std::set, std::list, std::vector, std::map, ...) a algoritmy (std::sort, ...) a potom aspoň základy Boostu.
A tady máš ukázku vylistování adresáře /etc seřazené podle přípony

#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include <boost/filesystem.hpp>
#include <boost/lambda/lambda.hpp>
#include <iostream>
int main(int argc, char **argv)
{
std::vector<boost::filesystem::path> files;
std::copy(
boost::filesystem::directory_iterator(
boost::filesystem::path("/etc")),
boost::filesystem::directory_iterator(),
std::back_inserter(files));
std::sort(files.begin(), files.end(),
boost::bind(&boost::filesystem::path::extension, boost::lambda::_1)
< boost::bind(&boost::filesystem::path::extension, boost::lambda::_2));
BOOST_FOREACH(boost::filesystem::path &file, files) {
std::cout << file.filename() << std::endl;
}
return 0;
}
linkovat s volbou -lboost_filesystem-mt