1 #include<iostream> 2 using namespace std; 3 template<typename T>void print(T* a, int len) 4 { 5 if(a == NULL) 6 return; 7 for(int i = 0; i < len; i++) 8 cout << a[i] << " "; 9 cout << endl; 10 } 11 template<typename T>void swap(T* a, T* b) 12 { 13 T tmp = *a; 14 *a=*b; 15 *b=tmp; 16 } 17 template<typename T>void permutation(T* a,int k,int len) 18 { 19 if(k >= len)//k代表数组的下标,len代表数组的长度,所以k>=len时就该输出了。 20 { 21 print(a,len); 22 } 23 for(int i = k; i < len; i++) 24 { 25 swap(&a[k],&a[i]); 26 permutation(a,k+1,len); 27 swap(&a[k],&a[i]); 28 } 29 } 30 int main() 31 { 32 int arr[] = {1,2,3,4}; 33 //char arr[] = "123"; 34 int len = sizeof(arr) / sizeof(arr[0]); 35 if(arr[len-1] == '\0') 36 len-=1; 37 permutation(arr,0,len); 38 return 0; 39 }
对数组元素的全排列,递归实现。
记录每天的收获,from now on!