排序
排序
排序就多了,也一直懒得更新,毕竟百度上一搜一大把,写的也肯定比我好,以后什么时候不懒了再更新吧
字典树排序
突发奇想,纯粹是突然想到的。
对于字符串(数字也可以看成是一个字符串)的排序,写了几种基本排序,突然想到字典树。字典树不就是按照字典序排列的吗?把所有字符串插入到字典树中,然后再把字典树中的单词按序输出,不就可以看成是排序吗。
#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;
}