我正在开发一个c ++程序,我必须将数组传递给多个排序函数并比较函数的运行时间。例如,我有一个包含100个元素的数组,其中包含1到10的随机数。我有一个冒泡排序,合并排序和快速排序功能,我必须将数组传递给每个函数。但是当我传递数组时,第一个排序函数会更改原始数组,以便在传递给下一个函数时它已经被排序。这是预期的,但我想知道如何将这个数组存储在一个单独的文件中,也许是一个头文件,以保持每个函数调用的原始数组不被排序。
以下是我的代码的布局:
#include <iostream>
using namespace std;
//void bubblesort, mergesort, quicksort function prototypes
int main()
{
int a[100];
for (int i = 0; i < 100; i++)
a[i] = rand() % 10 + 1;
bubblesort(a);
mergesort(a);
quicksort(a);
return 0;
}
//void bubblesort, mergesort, quicksort function definitions
此代码显然只是一个布局,除了调用排序函数更改原始数组这一事实外,排序函数与此问题无关。谢谢你的帮助。
答案 0 :(得分:1)
您不需要此文件。尽管现在操作系统上的常用文件系统很好地映射到内存(在很多情况下这将是它们的缓存)并且延迟交换到磁盘,但是与文件系统交互可能会使您的代码效率低得多,因为您正在写入磁盘。
由于您使用C ++标记了这个问题,我将以C ++方式(或至少是C ++标准库方式)回答这个问题。你想要的是在将数组传递给函数时制作数组的副本。在您传递数组的原始地址时,您不会制作任何副本(只能是指针的副本)。如果您使用vectors,此过程将变得简单。所以程序可能是
#include <iostream>
#include <vector>
using namespace std;
// The declarations would just need to change to this, I am assuming
// they print to stdout
void bubblesort(vector<int> vec);
void mergesort(vector<int> vec);
void quicksort(vector<int> vec);
int main()
{
vector<int> a;
for (int i = 0; i < 100; i++)
a.push_back(rand() % 10 + 1);
bubblesort(a);
mergesort(a);
quicksort(a);
return 0;
}
这里的矢量将按值传递,因此函数访问的矢量是原始的副本。带有向量的东西是它们更灵活,在大多数高级编程场景中通常应优先于数组。
但是,如果你的应用程序要求使用低级别数组,你可以使用memcpy来实现这种复制效果。
#include <iostream>
#include <vector>
using namespace std;
//void bubblesort, mergesort, quicksort function prototypes
int main()
{
int a[100];
for (int i = 0; i < 100; i++)
a[i] = rand() % 10 + 1);
int for_bubble_sort[100];
memcpy(for_bubble_sort, a, 100);
bubblesort(for_bubble_sort);
int for_merge_sort[100];
memcpy(for_merge_sort, a, 100);
mergesort(for_merge_sort);
int for_quick_sort[100];
memcpy(for_quick_sort, a, 100);
quicksort(for_quick_sort);
return 0;
}
答案 1 :(得分:0)
好吧,你应该制作另一个数组。使用memcpy()
将原始数组的内容复制到此数组,或使用循环。
答案 2 :(得分:-2)
您可以将数组声明为const
,以便将其保留为初始值,而且函数不会更改。