First of all this is homework , and I found another topic talking about the same subject but there was no answer. Here is the problem:
The main problem is how to make this kind of sort. Should I convert each integer to bits and compare them? Please do not give me the solution just a hint or an explanation of how to do it. Thanks for your help ! [EDIT] I found this script in the internet but i did not understand how it works :
#include <cstdlib> #include <iostream> #include <string> #include <cctype> #include<algorithm> #include<string> #include <iterator> using namespace std; // Radix sort comparator for 32-bit two's complement integers class radix_test { const int bit; // bit position [0..31] to examine public: radix_test(int offset) : bit(offset) {} // constructor bool operator()(int value) const // function call operator { if (bit == 31) // sign bit return value < 0; // negative int to left partition else return !(value & (1 << bit)); // 0 bit to left partition } }; // Least significant digit radix sort void lsd_radix_sort(int *first, int *last) { for (int lsb = 0; lsb < 32; ++lsb) // least-significant-bit { std::stable_partition(first, last, radix_test(lsb)); } } // Most significant digit radix sort (recursive) void msd_radix_sort(int *first, int *last, int msb = 31) { if (first != last && msb >= 0) { int *mid = std::partition(first, last, radix_test(msb)); msb--; // decrement most-significant-bit msd_radix_sort(first, mid, msb); // sort left partition msd_radix_sort(mid, last, msb); // sort right partition } } int main(int argc, char *argv[]) { int data[] = { 170, 45, 75, -90, -802, 24, 2, 66 }; lsd_radix_sort(data, data + 8); // msd_radix_sort(data, data + 8); std::copy(data, data + 8, std::ostream_iterator<int>(std::cout, " ")); system("PAUSE"); return EXIT_SUCCESS; }