赞
踩
普通的递归全排列(可与本文的代码比较来看):https://blog.csdn.net/qq_40760732/article/details/100098306
注意:Perm(char list[],int p,int q)做的是数组list[]中下标值p与q之间所有元素的全排列,再Perm函数中调用Sort(list,p,q+1)做的是下标值为p到q+1之间元素的全排列,每次递归p值都会加一,即每次都会对除下标值为零之外的元素进行排序。
- #include<iostream>
- using namespace std;
- void Sort(char a[], int g, int b); //声明排序函数,对下标值为g到b之间的元素进行排序
- void Swap(char& a, char& b)
- {
- char tem;
- tem = a;
- a = b;
- b = tem;
- }
-
- void Perm(char list[], int p, int q)
- {
- if (p == q)
- {
- for (int i = 0; i <= q; i++)
- cout << list[i];
- cout << ' ';
- }
- else
- {
- for (int i = p; i <= q; i++)
- {
- Sort(list,p, q + 1); //每次递归都要排序
- Swap(list[i], list[p]);
- Perm(list, p + 1, q);
- Swap(list[i], list[p]);
- }
- }
- }
-
- //排序函数(选择排序法)
- void Sort(char a[],int g,int b)
- {
- char tem;
- int m,n;
- for (int i = g; i < b; i++)
- {
- m = i;
- for (int j = i + 1; j < b; j++)
- {
- if (a[m] > a[j])
- {
- m = j;
- }
-
- }
- if (m != i)
- {
- tem = a[m];
- a[m] = a[i];
- a[i] = tem;
- }
- }
- }
-
-
- int main()
- {
- int i;
- char* a = new char[20];
- cin.getline(a, 20,'\n');
- for (i = 0; a[i] != ','; i++)
- i = i;
-
- Sort(a,0, i);
- Perm(a, 0, i-1);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。