全排列算法实现
Posted green-crosswalk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全排列算法实现相关的知识,希望对你有一定的参考价值。
7年前一个组合算法错失鹅场offer,之后专门了解排列组合的算法,岂知入了社会,大部分算法根本就用不到。闲着无事,回忆排列算法如何实现的。
算法最重要的一步-证明,貌似一般学校都不教的吧。用数学归纳可以简单认为是对的。
1 int getValidLen(int a[], int max) 2 { 3 return 6; 4 } 5 6 void printArray(int a[], int len, int times) 7 { 8 printf("%04d: ", times); 9 for (int i = 1; i <= len; i++) 10 { 11 printf("%d ", a[i]); 12 } 13 printf("\n"); 14 } 15 16 void reverseSort(int a[], int len, int position) 17 { 18 int middle = (len + position) / 2; 19 int end = len; 20 int tmp = 0; 21 for (int i = position; i <= middle; i++) 22 { 23 tmp = a[i]; 24 a[i] = a[end]; 25 a[end] = tmp; 26 end -= 1; 27 } 28 } 29 int main() 30 { 31 int a[30] = { 0 }; 32 int len = getValidLen(a, 29); 33 int times = 0; 34 for (int i = 1; i <= len; i++) 35 { 36 a[i] = i; 37 } 38 int loop = 0; 39 int loop1 = 0; 40 while (true) 41 { 42 times++; 43 printArray(a, len, times); 44 for (loop = len; loop > 1; loop--) 45 { 46 if (a[loop] > a[loop - 1]) 47 break; 48 } 49 if (loop == 1) 50 { 51 printf("Over!\n"); 52 break; 53 } 54 //insert sort 55 for (loop1 = len; loop1 >= loop; loop1--) 56 { 57 if (a[loop1] > a[loop - 1]) 58 { 59 a[0] = a[loop - 1]; 60 a[loop - 1] = a[loop1]; 61 a[loop1] = a[0]; 62 break; 63 } 64 } 65 //reverse sort 66 reverseSort(a, len, loop); 67 } 68 }
以上是关于全排列算法实现的主要内容,如果未能解决你的问题,请参考以下文章