⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radixsort.cpp

📁 数据结构栈和队列基本源代码
💻 CPP
字号:
// 本程序实现对一个序列进行基数排序操作
#include <iostream>
#include <vector>
#include <queue>

using namespace std;
// 对序列ivec进行 d 位的基数排序的函数声明
void radixSort(vector<int> &ivec, int d);

// 主函数
int main()
{
	vector<int> ivec;
	int i = 0, tmp, d;
	// 输入待进行基数排序的序列,并用一个向量保存
	cout << "请输入需要进行基数排序的序列(用空格隔开,最后输入0表示完成输入)\n";
	cin >> tmp;
	while ( tmp != 0 )
	{
		ivec.push_back(tmp);
		cin >> tmp;
	}
	cout << "\n请输入需要进行基数排序的最大位数:" << endl;
	cin >> d;
	// 输入序列回显
	cout << "\n输入的待进行基数排序的序列是:" << endl;
	for ( i = 0; i < ivec.size(); ++i)
		cout << ivec[i] << "  ";
	cout << endl;
	// 调用radixSort函数进行基数排序
	radixSort(ivec, d);
	// 经过排序后的序列显示
	cout << "\n经过基数排序后得到的序列为:" << endl;
	for ( i = 0; i < ivec.size(); ++i)
		cout << ivec[i] << "  ";
	system("pause"); 
	return 0;
}

// 对序列ivec进行 d 位的基数排序
void radixSort(vector<int> &ivec, int d)
{
	int i, j;
	int digit = 1;			
    // 10个对应于位的队列 		
	queue<int> digitQueue[10];
	for ( i = 0; i < d; ++i)		
	{
		// 将向量中的数依次进入相应位的队列中
		for (j = 0; j < ivec.size(); j++)
			digitQueue[(ivec[j] / digit) % 10].push(ivec[j]);
			
		// 将队列空间回收,用向量来保存排序后的序列
        j = 0;
		for (int digitVal = 0; digitVal < 10; ++digitVal)
			while (!digitQueue[digitVal].empty())
			{
				ivec[j] = digitQueue[digitVal].front();
				digitQueue[digitVal].pop();
				j++;
			}
			
		// 每进行一位基数排序,就将中间结果输出显示
		cout << "经过第 " << i << "次排序后得到的序列:" << endl;
		for ( j = 0; j < ivec.size(); ++j)
			cout << ivec[j] << "  ";
		cout << endl;
		
		// 从个位数开始,直到第d位数
		digit *= 10;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -