#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;
}
指针数组将文本行排序
最新推荐文章于 2024-01-04 11:58:22 发布