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

📄 testradixsort.cpp

📁 常用算法代码
💻 CPP
字号:
#include<iostream>
using namespace std;

struct Node{
	int key;
	Node * prior;
	Node * next;
};

int power(int n,int t){
	int x = n;
	while(--t)x*=n;
	return x;
}

Node* createNode(int n){
	Node *p;
	if((p = new Node())==NULL){
		cout<<"无法分配内存!"<<endl;
	}
	p->key = n;
	p->prior = NULL;
	p->next = NULL;
	return p;
}

void viewAllNodes(Node *L){
	Node *h = L->next;
	while(h!=L){
		cout<<h->key<<" ";
		h = h->next;		
	};
	cout<<endl;
}

template<class Type>
void radix_sort(Type *L, int k){
	Type *Lhead[10], *p;
	int i,j;
	for(i=0; i<10; i++){
		Lhead[i] = new Type;
	}
	for(i=0; i<k; i++){
		for(j=0; j<10; j++){
			Lhead[j]->prior = Lhead[j] -> next = Lhead[j];
		}
		while(L->next!=L){
			p = del_entry(L);
			j = get_digital(p,i);
			add_entry(Lhead[j], p);
		}
		for(j=0;j<10;j++){
			append(L,Lhead[j]);
		}
	}
	for(i=0; i<10; i++){
		delete(Lhead[i]);
	}
}

template <class Type>
Type *del_entry(Type *L){
	Type *p;
	p = L->next;
	if(p!=L){
		p->prior->next = p->next;
		p->next->prior = p->prior;
	}
	else {
		p = NULL;
	}
	return p;
}

template <class Type>
void add_entry(Type *L, Type *p){
	p->prior = L->prior;
	p->next = L;
	L->prior->next = p;
	L->prior = p;
}

template <class Type>
int get_digital(Type *p, int i){
	int key;
	key = p->key;
	if(i!=0){
		key = key/power(10,i);
	}
	return key%10;
}

template<class Type>
void append(Type *L, Type* L1){
	if(L1->next!=L1){
		L->prior->next = L1 ->next;
		L1->next->prior = L->prior;
		L1->prior->next = L;
		L->prior = L1->prior;
	}
}

int main(){
	Node *h,*p;
	int n,k, value;

	cout<<"请输入数组的长度:";
	cin>>n;
	cout<<"请输入数组元素的最多位数:";
	cin>>k;
	cout<<"请输入数组元素:";
	h = createNode(0);
	h->next = h->prior = h;
	for(int i=0;i<n;i++){
		cin>>value;
		p = createNode(value);
		add_entry(h,p);
	}
	radix_sort(h,k);
	viewAllNodes(h);
	return 0;
}

⌨️ 快捷键说明

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