全排列非递归算法

来源:互联网 发布:淘宝自助小火锅图片 编辑:程序博客网 时间:2024/06/05 10:02
#include <stdio.h>void swap(char *a , char *b){  char temp = *a;  *a = *b;  *b = temp;}void Reverse(char * a , char *b){  while(a<b)  {    swap(a,b);    a++;    b--;  }}void showstr(char a[],int len){  printf("%s\n",a);}void FindNextPermutation(char a[],int len){  if(NULL == a)  {    return;  }  char *pEnd = a + len;  char *p , *q , *pFind;  p = pEnd;  while(p!=a)  {    q = p;    --p;    if(*p < *q) //从后向前寻找第一个升序序列    {      pFind = pEnd;//在后面的降序序列中找到比目标数字大的最小的数      while(*pFind <= *p)      {        pFind--;      }      swap(pFind,p);      Reverse(q,pEnd);//替换后进行全部翻转      showstr(a,len);      return ;    }  }  Reverse(p,pEnd);  return;}int main(){  char str[] = "1234";  char end[] = "4321";  int  len   = sizeof(str) - 2;  FindNextPermutation(str,len);      do  {    FindNextPermutation(str,len);    }while(0!=strcmp(str,end));}

原创粉丝点击