基数排序求助
  • 板块学术版
  • 楼主theb0t
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/1 19:34
  • 上次更新2023/12/1 21:26:05
查看原帖
基数排序求助
997236
theb0t楼主2023/12/1 19:34

为什么我的基数排序错了呢?

还有它的复杂度应该远比O(n)高吧

// 语言C++
#include<iostream>
#include<vector>
using namespace std;
int n;
int a[100005];
vector<int> v[100005];
int bit(int n)
{
	int ans=0;
	while(n)
	{
		ans++;
		n/=10;
	}
	return ans;
}
int maxbit()
{
	int ans=-1;
	for(int i=1;i<=n;i++)
	{
		int temp=a[i];
		int k=bit(a[i]);
		if(k>ans) ans=k;
	}
	return ans;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int u=1;u<=maxbit();u++)
	{
		for(int i=1;i<=n;i++)
		{
			int k;
			int temp=a[i];
			for(int j=1;j<=u;j++)
			{
				k=temp%10;
				temp/=10;
			}
			v[k].push_back(a[i]);
		}
		int cnt=0;
		for(int i=1;i<=n;i++)
		{
			int p=0;
			while(p+1<=v[i].size()) a[++cnt]=v[i][p++];
		}
	}
	for(int i=1;i<=n;i++) cout<<a[i]<<endl;
	return 0;
}

2023/12/1 19:34
加载中...