راه که زیاده
مثلا میشه یک کلاس برای ذخیره اعداد نوشت به این شکل که باهاش بشه به تعداد رقم های هر عدد و رقم ها بصورت جدا جدا دسترسی داشت .
#include <iostream>
#include <vector>
#include <algorithm>
class Int
{
public:
Int(int number):number_(number)
{
while(number >0)
{
digits.push_back(number%10);
number /=10;
}
}
int operator[](int index)const
{
return digits[index];
}
int size() const
{
return digits.size();
}
int operator()()const
{
return number_;
}
private:
int number_;
std::vector<int> digits;
};
int main()
{
Int myNumber(19);
std::cout<<myNumber.size()<<"\n";//tedad ragham ha;
std::cout<<myNumber[0]<<"\n" ;//ragham 0 ro neshoon mide yani 9;
std::cout<<myNumber();//khode adad ro neshoon mide : 19
}
بعد ورودی که میگیری بصورت شی این کلاس ذخیره کنی و با یکم عوض کردن counting sort اعداد رو مرتب کنی
مثلا توی کد زیر با کامل کردن counting sort الگوریتم کامل میشه :
#include <iostream>
#include <vector>
#include <algorithm>
class Int
{
public:
Int(int number):number_(number)
{
while(number >0)
{
digits.push_back(number%10);
number /=10;
}
}
int operator[](int index)const
{
return digits[index];
}
int size() const
{
return digits.size();
}
int operator()()const
{
return number_;
}
private:
int number_;
std::vector<int> digits;
};
void countingSort(std::vector<Int>& numbers,int sort_digit)
{
//do counting sort ( sotoon sort_digit bayad moratab beshe )
}
void radix_sort(std::vector<Int>& numbers)
{
Int BiggestInt=*(std::max_element(numbers.begin(),numbers.end(),[](const Int& a,const Int& b){
return a.size()<b.size() ;
}));
int max_size = BiggestInt.size();
for(int i=0;i<max_size;i++)
countingSort(numbers,i);
}
int main()
{
std::vector<Int> numbers;
for(int i=0;i<10;i++)
{
int n;
std::cin>>n;
numbers.push_back(Int(n));
}
radix_sort(numbers);
}