递归全排序排列

2014-11-24 02:50:18 · 作者: · 浏览: 0
#include 
  
   
#include 
   
     #include 
    
      #define max_num 100 #define SWAP(X, Y, TEMP) ((TEMP = X), (X = Y), (Y = TEMP)) //很灵活的递归算法
    
   
  
void perm(int *list, int i, int n)
{
	int j, temp;

	if (i == (n - 1)) {
		for (j = 0; j < n; j++) {
			printf("%d ", list[j]);
		}
		printf("\n");
	} else {
		for (j = i; j < n; j++) {
			SWAP(list[i], list[j], temp);
			perm(list, i + 1, n);
			SWAP(list[i], list[j], temp);
		}
	} 
}


int main(int argc, char *argv[])
{
	int list[max_num];
	int i, j, num, min, temp;
	
	printf("Please input number:");
	scanf("%d", &num);
	if (num < 0 || num >
max_num) { fprintf(stderr, "invalid data\n"); exit(1); } for (i = 0; i < num; i++) { list[i] = rand() % 1000; printf("%d ", list[i]); } printf("\n"); for (i = 0; i < num; i++) { min = i; for (j = i + 1; j < num; j ++) { if (list[j] < list[min]) min = j; } SWAP(list[i], list[min], temp); } printf("After select sort result:\n"); for (i = 0; i < num; i ++) printf("%d ", list[i]); printf("\n\n\n"); perm(list, 0, num); }