C++关于快速排序问题,我写的一个快速排序,测试时,当数组长度为1000时,还可以,可是到了1000000时就会出错

发布于 2021-11-27 11:12:42 字数 1456 浏览 726 评论 5

//C++关于快速排序问题,我写的一个快速排序,测试时,当数组长度为1000时,还可以,可是到了1000000时
//就会出错,很想知道问题出在哪里?求教?,我在VS2013环境下测试的

#include<iostream>

#include<ctime>
using namespace std;


void QuickSort(int *a, int low, int high);
int FindPos(int *a, int low, int high);


int main()
{
clock_t begin, end;
begin = clock();
srand(time(0));


int l = 100000; //定义生成的多少数字

int *a = new int[l];
for (int i = 0; i < l; i++)
a[i] = rand(); //随机生成数


QuickSort(a, 0, l); 

end = clock();
cout << end - begin << " ms" << endl;
return 0;
}


void QuickSort(int *a, int low, int high)
{
if (low < high)
{
int pos = FindPos(a, low, high);
QuickSort(a, low,pos-1);
QuickSort(a,pos+1,high);
}
}
int FindPos(int *a, int low, int high)
{
int temp = a[low]; 
while (low < high) 
{
while (low < high&&a[low] <= temp) 
low++; 
a[high] = a[low]; 


while (low < high&&a[high] >= temp) 
high--; 
a[high] = a[low]; 

a[low] = temp; //也可以  a[high]=temp
return low; //也可以是  return high;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

伪装你 2021-11-29 13:24:19

我知道了. while (low < high&&a[high] >= temp) high--; a[high] = a[low]; 的最后一句应该改为 a[low]=a[high]... 谢谢你了...

顾挽 2021-11-29 13:22:05

没看,估计栈溢出

平生欢 2021-11-29 12:59:37

应该不是,用shell排序时 int可以达到目的,试过了,还是一样的结果

孤檠 2021-11-29 09:17:45

我知道了. while (low < high&&a[high] >= temp) high--; a[high] = a[low]; 的最后一句应该改为 a[low]=a[high]... 谢谢你了...

顾挽 2021-11-29 05:43:19

应该是int溢出了,可以尝试用long。甚至long long

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文