指针数组将文本行排序

#include <stdio.h>
#include <string.h>
#define MAXLINES 5000
char *lineptr[MAXLINES];
int readlines(char *lineptr[],int nlines);
void writelines(char *lineptr[],int nlines); 
void qsort(char *lineptr[],int left,int right);
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int nlines;
	if((nlines=readlines(lineptr,MAXLINES))>=0){
		qsort(lineptr,0,nlines-1);
		writelines(lineptr,nlines);//注意函数对应函数声明是的类型一致// 
		return 0;
	}else{
		printf("error:input too big to sort\n");
		return 1;
	}
	return 0;
}
#define MAXLEN 1000

int getline(char *,int);//函数的输入// 
char *alloc(int);//内存够吗//
int readlines(char *lineptr[],int maxlines){
	int nlines;
	int len;
	char line[MAXLEN];
	char *p;
	nlines=0;
	whiie(len=getline(line,MAXLEN)>0){
		if(nlines>=MAXLINES||(p=alloc(len))==NULL){
			return 0;
		}else{
		 	line[len-1]='\0';
		 	strcpy(p,line);
			lineptr[nlines++]=p;
		}
	}
	return nlines;
}


void writelines(char *lineptr[],int nlines){
	int i;
	for(i=0;i<nlines;i++){
		printf("%s\n",lineptr[i]);
	}
}
//或者另外一种写法//
/*void writelines(char *lineptr[],int nlines){
	while(nlines-->0){
		printf("%s\n",*lineptr++);
	}
}*/
void qsort(char *v[],int left,int right){
	int i,last;
	void swap(char *v[],int i,int j);
	if(left>=right){
		return;
	}
	swap(v,left,(right+left)/2);
	last=left;
	for(i=left+1;i<=right;i++){
		if(strcmp(v[i],v[left])>0){
			swap(v,last++,i);
		}
	}
	swap(v,left,last);
	qsort(v,left,last-1);
	qsort(v,last+1,right);
}
void swap(char *v[],int i,int j){
	char *temp;
	temp=v[i];
	v[i]=v[j];
	v[j]=temp;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值