递归算法
#include <ctype.h>
int getch(void);
void ungetch(int);
/*getop函数:获取下一个运算符或数值操作数*/
int getop(char s[])
{
int i,c;
while ((s[0] = c = getch()) == ' ' || c == '\t')
;
s[1] = '\0';
if(!isdigit(c) && c != '.')
return c; /*不是数*/
i = 0;
if(isdigit(c)) /*收集整数部分*/
while(isdigit(s[i++] = c = getch()))
;
if(c=='.')
while(isdigit(s[++i]=c=getch()))
;
s[i]='\0';
if(c!=EOF)
ungetch(c);
return NUMBER;
}
int getch(void);
void ungetch(int);
/*getop函数:获取下一个运算符或数值操作数*/
int getop(char s[])
{
int i,c;
while ((s[0] = c = getch()) == ' ' || c == '\t')
;
s[1] = '\0';
if(!isdigit(c) && c != '.')
return c; /*不是数*/
i = 0;
if(isdigit(c)) /*收集整数部分*/
while(isdigit(s[i++] = c = getch()))
;
if(c=='.')
while(isdigit(s[++i]=c=getch()))
;
s[i]='\0';
if(c!=EOF)
ungetch(c);
return NUMBER;
}
#include <stdio.h>
/*printd函数:打印十进制数n(运用递归算法)*/
void printd(int n)
{
if(n<0)
{
putchar('-');
n=-n;
}
if(n/10)
printd(n/10);
putchar(n%10+'0');
}
/*qsort函数:以递增顺序对v[left]...v[right]进行排序*/
void qsort(int v[],int left, int right)
{
int i,last;
void swap(int v[], int i, int j);
if(left>=right) /*若数组包含的元素数少于2个*/
return; /*则不执行任何操作*/
swap(v,left,(left+right)/2); /*将划分子集的元素*/
last = left; /*移动到v[0]*/
for(i=left+1;i<=right;i++) /*划分子集*/
if(v[i]<v[left])
swap(v,++last,i);
swap(v,left,last); /*恢复划分子集的元素*/
qsort(v,left,last-1);
qsort(v,last+1,right);
}
/*swap函数:交换v[i]与v[j]的值*/
void swap(int v[], int i, int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
void qsort(int v[],int left, int right)
{
int i,last;
void swap(int v[], int i, int j);
if(left>=right) /*若数组包含的元素数少于2个*/
return; /*则不执行任何操作*/
swap(v,left,(left+right)/2); /*将划分子集的元素*/
last = left; /*移动到v[0]*/
for(i=left+1;i<=right;i++) /*划分子集*/
if(v[i]<v[left])
swap(v,++last,i);
swap(v,left,last); /*恢复划分子集的元素*/
qsort(v,left,last-1);
qsort(v,last+1,right);
}
/*swap函数:交换v[i]与v[j]的值*/
void swap(int v[], int i, int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}