您的位置:首页 > 其它

第七章快速排序之“区间模糊排序FUZZY-SORT”(待改进。。。)

2012-01-07 17:14 429 查看
快速排序可以看成区间大小为1的模糊排序。

#include <string.h>
#include <time.h>

#define BUFFER_SIZE 10

typedef struct
{
int start;
int end;
}Node;

int FuzzyPartition(Node *a,int p,int r)
{
Node tmp;
int i=0;
int j=0;
int k=0;
Node x;

i=p-1;
x.start=a[r].start;
x.end=a[r].end;
for(j=p;j<r;j++)
{
if(a[j].end<x.start)
{//在所选主元区间左边
i++;
tmp.start=a[i].start;
tmp.end=a[i].end;
a[i].start=a[j].start;
a[i].end=a[j].end;
a[j].start=tmp.start;
a[j].end=tmp.end;
}
else if(a[j].start>x.end)
{//在所选主元区间右边
;
}
else
{//与所选主元区间有重叠,则将主元区间更新为重叠部分
x.start=(a[j].start>=x.start)?a[j].start:x.start;
x.end=(a[j].end<=x.end)?a[j].end:x.end;
}
}

i++;
tmp.start=a[i].start;
tmp.end=a[i].end;
a[i].start=a[j].start;
a[i].end=a[j].end;
a[j].start=tmp.start;
a[j].end=tmp.end;

return i;
}

void FuzzySort(Node *a,int p,int r)
{
int q=0;
if(p<r)
{
q=FuzzyPartition(a,p,r);
FuzzySort(a,p,q-1);
FuzzySort(a,q+1,r);
}
}

int main()
{
int i=0;
int j=0;
Node a[BUFFER_SIZE];
//随机生成数组
srand((unsigned)time(NULL));
for(j=0;j<BUFFER_SIZE;j++)
{
a[j].start=rand()%100;
a[j].end=rand()%100+100;
}
printf("随机生成的区间:\n");
for(i=0;i<BUFFER_SIZE;i++)
{
printf("%d %d\n",a[i].start,a[i].end);
}
printf("\n");

FuzzySort(a,0,BUFFER_SIZE-1);
printf("对区间进行模糊排序:\n");
for(i=0;i<BUFFER_SIZE;i++)
{
printf("%d %d\n",a[i].start,a[i].end);
}

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: