基数排序这么写对吗?
查看原帖
基数排序这么写对吗?
469375
Imtking楼主2023/5/18 19:17
#include <iostream>

using namespace std;

// 2876 % 10 = 6 / 1 = 6;
// 2876 % 100 = 76 / 10 = 7;
// 2876 % 1000 = 876 / 100 = 8;
// 2876 % 10000 = 2876 / 1000 = 2;

struct node {int x[10];} a[100100], b[10][100100];
int cnt[10];

inline int f(int n, int x)
{
	return (n % x) / (x / 10);
}

int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; ++i)
	{
		cin >> a[i].x[0];
		int x = 10;
		for (int j = 1; j <= 9; ++j)
		{
			a[i].x[j] = f(a[i].x[0], x);
			x *= 10;
		}
	}
	for (int i = 1; i <= 9; ++i) // 1-9位
	{
		for (int j = 0; j <= 9; ++j) cnt[j] = 0;
		for (int j = 1; j <= n; ++j)
			b[a[j].x[i]][++cnt[a[j].x[i]]] = a[j];
		int tp = 0;
		for (int j = 0; j <= 9; ++j)
		{
			for (int k = 1; k <= cnt[j]; ++k)
			{
				a[++tp] = b[j][k];
			}
		}
	}
	for (int i = 1; i <= n; ++i) cout << a[i].x[0] << " ";
	return 0;
}
2023/5/18 19:17
加载中...