排序

排序

排序就多了,也一直懒得更新,毕竟百度上一搜一大把,写的也肯定比我好,以后什么时候不懒了再更新吧

字典树排序

突发奇想,纯粹是突然想到的。
对于字符串(数字也可以看成是一个字符串)的排序,写了几种基本排序,突然想到字典树。字典树不就是按照字典序排列的吗?把所有字符串插入到字典树中,然后再把字典树中的单词按序输出,不就可以看成是排序吗。

#include <bits/stdc++.h>
using namespace std;
struct Tire_Tree;
typedef struct Tire_Tree *T;
typedef T Position;
typedef Position Tree;
#define N 128
struct Tire_Tree
{
	Position Next[N];
	int count;
	Tire_tree()
	{
		for(int i=0;i<N;i++) Next[i]=NULL;
		count=0;
	}
	void Insert(char s[],Tree tr)
	{
		int size=strlen(s);
		for(int i=0;i<size;i++){
			if(tr->Next[s[i]-' ']==NULL)
				tr->Next[s[i]-' ']=new struct Tire_Tree();
			tr=tr->Next[s[i]-' '];
			if(i==size-1) tr->count++;
		}
	}
	void print(Tree tr,string s)
	{
		if(tr==NULL) return;
		if(tr->count>0){
			for(int i=0;i<tr->count;i++){
				cout<<s<<endl;
			}
		}
		for(int i=0;i<N;i++){
			if(tr->Next[i]!=NULL){
				print(tr->Next[i],s+char(i+32));
			}
		}
	}
}tr;

int main()
{
	char  s[][20]={"while","if","else","do","for","switch","case","whiee"};
	for(int i=0;i<8;i++){
		tr.Insert(s[i],&tr);
	}
	string ss;
	ss.clear();
	tr.print(&tr,ss);
	return 0;
}
posted @ 2018-12-11 14:19  凌乱风中  阅读(96)  评论(0编辑  收藏  举报