我发现BWTS比BWT会复杂很多,但是其中很多部分可以实现并行模块,因此也有很高的价值。下面是我写的代码,很脑残,实现起来很慢,并且处理751k的txt文件时会有卡死现象发生,不知道什么原因,有知道的告诉我一下。因为只是前期建模,因此也木有弄得很漂亮,各位高手多指点。。。。
#include<stdio.h>
#include<string.h>
#include<iostream.h>
#include<ctime>
#include <stdlib.h>
#define lenth 64 //所处理的字符块的长度
//字符串复制函数
void copy1(char to[],char from[],int l1,int l2){
int k=0;
for(int i=l1;i<l2;i++){
to[k]=from[i];
k++;
}
}
//字符串比较函数
int strncmp(char s[],char t[],int lim){
for(;*s==*t;s++,t++)
if(*s=='\0'||--lim<=0)
return 0;
return *s-*t;
}
//单行字符串移位
void moveonechar(char s[],int lim){
char z;
z=s[0];
for(int f=0;f<lim;f++){
if(f<lim-1) s[f]=s[f+1];
else s[f]=z;
}
}
//字符串移位函数
void movechar(char s[],int lim,char **a){
char *c;
c=(char *)malloc(sizeof(char)*(lim));
copy1(c,s,0,lim);
for(int i=0;i<lim;i++){
for(int j=0;j<lim;j++)
a[i][j]=c[j];
moveonechar(c,lim);
}
}
//字符串交换函数,同时将记录字符串长度的数组也相应的置换
void swap(char a[][lenth],int b[],int i,int j,int l )
{
char c[lenth];
int k;
copy1(c,a[i],0,l);
copy1(a[i],a[j],0,l);
copy1(a[j],c,0,l);
k=b[i];
b[i]=b[j];
b[j]=k;
}
//数组排序
/*void qsort(char a[][lenth],int lim){
int z;
char c[lenth];
for(int i=0;i<lim;i++){
for(int j=i+1;j<lim;j++){
z=strncmp(a[i],a[j],lim);
if(z>0){
swap(a,i,j,lenth);
}
}
}
}*/
//快速排序
void qsort(char v[][lenth],int a[],int left,int right){
int i,last;
if(left>=right) return;
swap(v,a,left,(left+right)/2,lenth);
last=left;
for(i=left+1;i<=right;i++)
if(strncmp(v[i],v[left],lenth)<0)
swap(v,a,++last,i,lenth);
swap(v,a,left,last,lenth);
qsort(v,a,left,last-1);
qsort(v,a,last+1,right);
}
//奇偶排序
/*void qsort(char **v,int l){
int flag=1;
while(flag!=0){
flag=0;
for(int i=0;i<l-1;i+=2){
if(strncmp(v[i],v[i+1],l)>0){
swap(v,i,i+1,l);
flag++;
}
}
for(int j=1;j<l-1;j+=2){
if(strncmp(v[j],v[j+1],l)>0){
swap(v,j,j+1,l);
flag++;
}
}
}
}*/
//形成输出数组函数
void comout(char a[][lenth],char out[],int lim){
for(int i=0;i<lim;i++){
out[i]=a[i][lim-1];
}
}
int main(){
time_t begin,end;
begin=clock();
//getline(line,lenth);
FILE *read;
read=fopen("ab.txt","r+");
if(!read)
printf("can't open file\n");
char line[lenth],out[lenth];
int a[lenth];
int whilenum=0,cmp=0,c=1,reservei=0;
int linenum=0;
int resa[lenth];
//getline(line,lenth);
//putline(line,lenth);
char **b,*r,**rr,**layndown;
while ((fread(line , sizeof(char),lenth,read))==lenth)
{
b=(char **)malloc(sizeof(char*)*(1));