#include <stdio.h>
#include <string>
#define MAXLINES 5000 /*最多可以输入5000行*/
#define MAXLEN 1000 /*max length of any input line*/
#define ALLOCSIZE 10000 /*size of available space */
char *lineptr[MAXLINES]; /*指向所有行的指针*/
static char allocbuf[ALLOCSIZE]; /*storage for alloc*/
static char *allocp = allocbuf; /*next free position */
int readlines(char *lineptr[], int nlines);
void writelines(char *lineptr[], int nlines);
int getline(char *, int);
char *alloc(int);
void qsort(char *lineptr[], int left, int right);
/* sort input lines*/
int main(){
int nlines; /*number of input lines read*/
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;
}
}
/*readlines : read input lines*/
int readlines(char *lineptr[], int maxlines){
int len, nlines;
char *p, line[MAXLEN];
nlines = 0;
while ((len = getline(line, MAXLEN)) > 0) {
if (nlines >= maxlines || (p = alloc(len)) == NULL) {
return -1;
}
else{
line[len - 1] = '\0';/*删除换行符*/
strcpy(p, line);
lineptr[nlines++] = p;
}
}
return nlines;
}
/*writelines : write output lines */
void writelines(char *lineptr[], int nlines){
int i ;
for ( i = 0; i < nlines; i ++) {
printf("%s\n", lineptr[i]);
}
}
char *alloc(int n){/* return pointer to n characters*/
if (allocbuf + ALLOCSIZE - allocp >= n) {
allocp += n;
return allocp - n;/*old p*/
}
else{ /* not enough room*/
return 0;
}
}
/************************************************************************/
/* qsort : sort v[left]...v[right] into increasing order
/************************************************************************/
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, (left + right) / 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;
}
/************************************************************************/
/* getline : get line into s, return length
/************************************************************************/
int getline(char s[], int lim){
int c, i;
i = 0;
while ( --lim > 0 && (c = getchar()) != EOF && c != '\n') {
s[i++] = c;
}
if (c == '\n') {
s[i++] = c;
}
s[i] = '\0';
return i;
}
C++利用指针数组和快排对输入的字符串进行排序
最新推荐文章于 2023-10-09 18:29:20 发布