递归算法

#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; 
}

#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;
}
 
 
 
 
 
 
 
 
 
 
posted @ 2019-11-18 11:02  烟火流沙  阅读(194)  评论(0编辑  收藏  举报