我刚刚学习了堆的算法。好吧,对象的数量越大,系统将它们安排在所有可能的排列中的时间就越多。但是当我在计算器中计算该数量对象的阶乘时,结果是即时的。为什么会发生同样的情况。排列比计算阶乘花费更多时间?
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
int len;
void swap (int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void print(const int *v)
{
int i;
int size = len;
if (v != 0) {
for ( i = 0; i < size; i++) {
cout<< v[i] ;
}
cout<<'\n';
}
}
void heappermute(int v[], int n) {
int i;
if (n == 1) {
print(v);
}
else {
for (i = 0; i < n; i++) {
heappermute(v, n-1);
if (n % 2 == 1) {
swap(&v[0], &v[n-1]);
}
else {
swap(&v[i], &v[n-1]);
}
}
}
}
int main()
{
int num[11];
int i;
cout<<"How many numbers you want to enter: ";
cin>>len;
cout<<"\nEnter the numbers: ";
for ( i = 0 ; i < len; i++)
cin>>num[i];
heappermute(num, len);
return 0;
}