博主遇到了这样的一个问题,写一个快速排序算法,然后将结果以文件的形式输出,但是运行时间却要用三四分钟之久,很离谱,简直是搞死心态了。
于是博主仔细观察了一下代码。
哦,这粗心大意的我哦。我把文件写入的部分放到了快速排序的后面。由于快速排序是递归调用,于是乎,在每一次递归调用的过程中,数字都会写入一次文件,从而造成巨大的时间浪费。
解决方法是,将写入文件的代码放到快速排序外面就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
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;}
问题解决