博主遇到了这样的一个问题,写一个快速排序算法,然后将结果以文件的形式输出,但是运行时间却要用三四分钟之久,很离谱,简直是搞死心态了。 于是博主仔细观察了一下代码。 哦,这粗心大意的我哦。我把文件写入的部分放到了快速排序的后面。由于快速排序是递归调用,于是乎,在每一次递归调用的过程中,数字都会写入一次文件,从而造成巨大的时间浪费。 解决方法是,将写入文件的代码放到快速排序外面就OK啦。
void SwapValue(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int Partition(int *a, int left, int right)
{
int x = a[right];
int i = left - 1;
for (int j = left; j < right; j++)
{
if (a[j] <= x)
{
i = i + 1;
SwapValue(a[i], a[j]);
}
}
SwapValue(a[i + 1], a[right]);
return i + 1;
}
int Randomized_Partition(int *a, int left, int right)
{
srand((int)time(NULL));
int i = rand() % (right - left + 1) + left;
SwapValue(a[i], a[right]);
return Partition(a, left, right);
}
void QuickSort(int* a, int left, int right)
{
if (left < right)
{
int qevt = Randomized_Partition(a, left, right);
QuickSort(a, left, qevt - 1);
QuickSort(a, qevt + 1, right);
}
}
void CreateFile(int *a,string filename)
{
ofstream ffout(filename.c_str());
if (!ffout.is_open())
{
cout << "创建失败" << endl;
exit(0);
}
else
{
for (int i = 0; i <MaxNumber; i++)
{
ffout << a[i] << " ";
if ((i + 1) % 10 == 0)
ffout << endl;
}
}
ffout.close();
}
void QuickSortTest()
{
string name = "QuickSort.txt";
CreateArry();
srand(time(0));
int begin;
int end;
begin = clock();
QuickSort(number,0,MaxNumber);
CreateFile(number,name);
end = clock();
cout << "快速排序用时...... " << end - begin << endl;
}
问题解决
|