LawrenceR77
2017-03-26 11:48学算法的时候写了个三路快排(C++),然后编译器又请我吃bug了,各位大佬麻烦帮我看看吧
/*-----------Quick Sort 3 Ways-----------*/
template<typename T>
void QuickSort3ways(T arr[], int n)
{
srand(NULL);
Sub_QuickSort3ways(arr, 0, n - 1);
}
template<typename T>
void Sub_QuickSort3ways(T arr[], int L, int R)
{
swap(arr[L], arr[rand() % (R - L + 1) + L]);
T v = arr[L];
int lt = L;
int gt = R + 1;
int i = L + 1;
while (i < gt)
{
if (arr[i] < v)
{
swap(arr[i], arr[lt + 1]);
lt++;
i++;
}
else if (arr[i] > v)
{
swap(arr[i], arr[gt - 1]);
gt--;
}
else
i++;
}
swap(arr[L], arr[lt]);
Sub_QuickSort3ways(arr, L, lt - 1);
Sub_QuickSort3ways(arr, gt, R);
}
int main()
{
int n = 100000;
int *arr1 = GenerateRandomArray(n, 0, n);
TimeTest("Quick Sort 3 Ways", QuickSort3ways, arr1, n);
delete[] arr1;
system("pause");
return 0;
}
先解释一把:GenerateRandomArray 生成一个随机数组,参数是元素个数,和元素的范围,函数内部用的是new申请的内存。
Time Test 测试算法的运行时间,参数分别是:算法名,使用的函数,数组和元素个数。
编译器:VS2015
然后他就告诉我栈溢出了
然后我找到了 call stack模块,里面是这样的:
有点蒙,为啥总是说R的值为-1??是不是哪里又写错了……
为什么没有人
- 点赞
- 回答
- 收藏
- 复制链接分享
1条回答
为你推荐
- C++:基于分治思想实现二维平面最近点对算法,n>3时程序崩溃
- c++
- 1个回答
- 【问题描述】 编写一个程序,从键盘接收一个字符串(长度不超过20),采用插入排序,按照字符顺序从小到大进行排序,最后输出排序后的字符串。
- c语言
- 1个回答
- 求C++大佬帮我看看,试了很多次还是没办法实现6.7.8的菜单功能
- c语言
- c++
- 1个回答
- C++语言编程 运用贪心算法的方法
- 算法
- 编程
- c++
- 4个回答
- 求问下面c++算法怎么理解?
- 算法
- c++
- 2个回答
换一换