【发布时间】:2016-05-08 00:42:30
【问题描述】:
我刚刚学习了堆的算法。好吧,对象的数量越大,系统将它们安排在所有可能的排列中的时间就越多。 但是当我在计算器中计算该数量对象的阶乘时,结果是即时的。 为什么会发生同样的情况。的排列比计算阶乘需要更多时间?
#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;
}
【问题讨论】:
-
你是如何计算排列的?显示代码。我怀疑一种方法可能是生成所有排列并计算它们,这比通过数学计算出有多少要昂贵得多。
-
@ShadowRanger 我已经编写了代码。这是我用的。
-
printf和scanf在 C++ 中通常不受欢迎。 -
@VermillionAzure:这段代码中没有一个特定于 C++ 的东西;想知道它是否真的是 C 或 C11 之类的,并且标签是错误的。
-
另外,您的
swap方法正在将int与char值交换,其中输入都指向int数据,您将在这里得到各种数据丢失.
标签: sorting c++11 permutation heaps-algorithm