同样的代码,为啥我的随机数超过500000万就执行不起来了呢,还请老师解释一下哪里出了问题

来源:3-5 快速排序法 - Quick Sort

qq_绿叶也有_0

2020-08-05

using namespace std;
#include
#include
#include “SortTestHelper.h”
#include “InsertionSort.h”
#include "mergeSort.h"
using namespace std;
////方法

// 对arr[l…r]部分进行partition操作
// 返回p, 使得arr[l…p-1] < arr[p] ; arr[p+1…r] > arr[p]

template
int _partition(T arr[],int l,int r)
{
//定义当前数组的初始中间值。当作是l.(暂时)
T v = arr[l];

int j =l;
for(int i = l+1;i<=r;i++)

    if(arr[i] < v)
    {
        swap(arr[j+1],arr[i]);
        j++;
    }

swap(arr[l],arr[j]);
return j;

}

template
void _quickSort(T arr[],int l,int r) //对数组分成前避 后闭的方式进行迭代
{
if(l >= r)
return;

int p = _partition(arr, l , r);
_quickSort(arr,l,p-1);
_quickSort(arr,p+1,r);

}

//快速排序法
template
void quickSort(T arr[],int n)
{
//针对数组,从0 到n-1 的数据排序
_quickSort(arr,0,n-1);
}

int main()
{

int n =  500000;

int *arr1 = SortTestHelper::generateRandomArray(n,0,n);
int *arr2 = SortTestHelper::copyIntArray(arr1,n);

SortTestHelper::testSort("merge Sort",mergeSort,arr1,n);
SortTestHelper::testSort("quick Sort" ,quickSort,arr2,n);

//用完空间要删除掉
delete [] arr1;
delete [] arr2;
cout<<endl;


return 0;

}

写回答

1回答

liuyubobobo

2020-08-06

什么叫执行不起来?报了什么错误?

0
2
liuyubobobo
回复
qq_绿叶也有_0
应该是 merge sort 的问题,我们之前实现的 merge sort 因为每次在 merge 中都开辟空间,导致数据规模过大的时候系统栈空间不足。可以参考这里:http://coding.imooc.com/learn/questiondetail/11396.html 继续加油!:)
2020-08-07
共2条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程