//实现可变长度的字符串序列快速排序算法
#include
#include
#include
#define MaxL 50 //最大的字符串长度
typedef struct node //记录类型
{
int start;//串的起始位置
int length;
}RecType;
int StringComp(char s[],RecType a[],int s1,RecType temp)
{
char str1[MaxL],str2[MaxL];
int i,j;
for(j=0,i=a[s1].start;i<a[s1].start+a[s1].length;i++,j++)
str1[j]=s[i];//将第s1个字符串复制到Str1中
str1[j]='\0';//字符串末尾置'\0'
for(j=0,i=temp.start;i<temp.start+temp.length;i++,j++)
str2[j]=s[i];//将temp所指的字符串复制到Str2中
str2[j]='\0';
return strcmp(str1,str2);//调用标准字符串比较函数返回结果
}
void QuickSort(char s[],RecType a[],int low,int high)
{
int i,j;
RecType temp;
i=low;
j=high;
if(low<high)
{
temp=a[low];
while(i!=j)
{
while(j>i && StringComp(s,a,j,temp)>0) j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j && StringComp(s,a,i,temp)<0) i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=temp;
QuickSort(s,a,low,i-1);
QuickSort(s,a,i+1,high);
}
}
int main()
{
int i,j,n=6;
char s[]={"whileifif-elsedo-whileforcase"};
RecType a[]={{0,5},{5,2},{7,7},{14,8},{22,3},{25,4}};
printf("排序前的字符串:\n");
for(i=0;i<n;i++)
{
printf(" ");
for(j=a[i].start;j<a[i].start+a[i].length;j++)
printf("%c",s[j]);
printf("\n");
}
printf("\n");
QuickSort(s,a,0,n-1);
printf("排序后的字符串:\n");
for(i=0;i<n;i++)
{
printf(" ");
for(j=a[i].start;j<a[i].start+a[i].length;j++)
printf("%c",s[j]);
printf("\n");
}
return 0;
}
数据结构源码笔记(C语言描述)汇总:
数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
数据结构源码笔记(C语言):直接插入排序
数据结构源码笔记(C语言):直接选择排序
数据结构源码笔记(C语言):置换-选择算法
数据结构源码笔记(C语言):Huffman树字符编码
数据结构源码笔记(C语言):Josephus问题之顺序表
数据结构源码笔记(C语言):Josephus问题之循环链接表
数据结构源码笔记(C语言):多项式合并
数据结构源码笔记(C语言):二叉树之叶子结点旋转销毁
数据结构源码笔记(C语言):哈夫曼树
数据结构源码笔记(C语言):集合的位向量表示
数据结构源码笔记(C语言):链接队列
数据结构源码笔记(C语言):链接栈
数据结构源码笔记(C语言):线性表的单链表示
数据结构源码笔记(C语言):线性表的顺序表示
数据结构源码笔记(C语言):栈的基本操作
数据结构源码笔记(C语言):中缀表达式
数据结构源码笔记(C语言):希尔插入排序
数据结构源码笔记(C语言):索引文件建立和查找
数据结构源码笔记(C语言):冒泡排序
数据结构源码笔记(C语言):快速排序
数据结构源码笔记(C语言):可变长度字符串的快速排序
数据结构源码笔记(C语言):基数排序
数据结构源码笔记(C语言):二路归并排序
数据结构源码笔记(C语言):堆排序
数据结构源码笔记(C语言):二叉树搜索树Kruskal
数据结构源码笔记(C语言):二叉搜索树Prim
数据结构源码笔记(C语言):最短路径弗洛伊德算法
数据结构源码笔记(C语言):深度、广度优先生成树
数据结构源码笔记(C语言):邻接矩阵转化邻接表
数据结构源码笔记(C语言):统计字符串中出现的字符及其次数
数据结构源码笔记(C语言):顺序查找
数据结构源码笔记(C语言):哈希表的相关运算算法
数据结构源码笔记(C语言):分块法查找
数据结构源码笔记(C语言):二分查找
数据结构源码笔记(C语言):二叉树遍历
数据结构源码笔记(C语言):二叉平衡树的相关操作算法
数据结构源码笔记(C语言):二叉排序树的基本操作算法
数据结构源码笔记(C语言):B树的相关运算算法