基数ソート(C++テンプレート)&&カウントソート(C++テンプレート)
16860 ワード
接尾辞の配列を学ぶ時1つのとても面白い順序を発見して具体的にどのように面白いか分からないで、個人は面白いと思っています
具体的な実現方法は大物ブログを見るhttps://blog.csdn.net/weixin_39408343/article/details/107115403
**私はここで私の板に専念します**
以下はカウント順**同じものだと思っていた**具体的な紹介点です
具体的な実現方法は大物ブログを見るhttps://blog.csdn.net/weixin_39408343/article/details/107115403
**私はここで私の板に専念します**
#include
#include
#include
using namespace std;
const int maxn=1e5;
int dat[maxn];
int tmp[maxn];
int cunt[maxn];
// dat
// tmp
// cunt
int main()
{
int n,max_=0,max_w=0;
cin>>n;
for(int i=0;i<n;i++){// , qaq
cin>>dat[i];
max_=max(max_,dat[i]);
}
while (max_)//
{
max_/=10;
max_w++;
}
int ide=1;//
for(int i=1;i<=max_w;i++)
{
for(int j=0;j<10;j++)//
cunt[j]=0;
for(int j=0;j<n;j++)
{
int k=(dat[j]/ide)%10;//
cunt[k]++;
}
for(int j=1;j<10;j++)// qaq
cunt[j]+=cunt[j-1];
for(int j=n-1;j>=0;j--)// n-1
{
int k=(dat[j]/ide)%10;
tmp[cunt[k]-1]=dat[j];
cunt[k]--;
}
for(int j=0;j<n;j++)
dat[j]=tmp[j];
ide*=10;
}
for(int i=0;i<n;i++)
cout<<dat[i]<<endl;
return 0;
}
以下はカウント順**同じものだと思っていた**具体的な紹介点です
#include
#include
#include
using namespace std;
const int maxn=1e5;
const int MAXN=1e5;
int dat[maxn];
int tmp[maxn];
int cunt[MAXN];
// dat
// tmp
// cunt
int main()
{
int n,max_=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>dat[i];
max_=max(max_,dat[i]);
}
for(int i=0;i<n;i++)
cunt[dat[i]]++;
for(int i=1;i<=max_;i++)
cunt[i]+=cunt[i-1];
for(int i=n-1;i>=0;i--)
{
tmp[cunt[dat[i]]-1]=dat[i];
cunt[dat[i]]--;
}
for(int i=0;i<n;i++)
cout<<tmp[i]<<endl;
return 0;
}