数据结构源码笔记(C语言):可变长度字符串的快速排序

//实现可变长度的字符串序列快速排序算法

#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树的相关运算算法

你可能感兴趣的:(数据结构源码笔记(C语言),数据结构,算法,字符串,c语言,快速排序)