C++ 什么';这个快速排序有什么问题,我是从书上查到的
我写了一个程序,包含对矢量中包含的一些数据进行快速排序 我引用了。--马克·艾伦·韦斯,但当我在VS2015&&G++4.8下执行它时,程序失败了 我唯一能确定的是,我计划的另一部分是正确的。 生成一些数据,并将它们读取到向量 (比较QuickSort和MergeSort之间的属性,而MergeSort在显示文本时运行良好)C++ 什么';这个快速排序有什么问题,我是从书上查到的,c++,quicksort,C++,Quicksort,我写了一个程序,包含对矢量中包含的一些数据进行快速排序 我引用了。--马克·艾伦·韦斯,但当我在VS2015&&G++4.8下执行它时,程序失败了 我唯一能确定的是,我计划的另一部分是正确的。 生成一些数据,并将它们读取到向量 (比较QuickSort和MergeSort之间的属性,而MergeSort在显示文本时运行良好) void快速排序(向量&a){ 快速排序(a,0,a.size()-1); } int median3(向量&a、int left、int right){ int mid=
void快速排序(向量&a){
快速排序(a,0,a.size()-1);
}
int median3(向量&a、int left、int right){
int mid=(左+右)>>1;
if(a[mid]//如果(左+10您需要确保right
大于left
,然后才能将其传递到快速排序(a,左,右)
。否则,当您尝试访问a[]
时,位置可能超出范围
此外,您不需要在median3
中将轴交换到末端,然后在QuickSort
中“还原”它。只需让i
和j
索引从向量的两端开始,然后将小于轴的数字与大于轴的数字交换
void QuickSort(vector<int> &a, int left, int right) {
int pivot = a[(left + right) / 2];
// begin partitioning
int i = left, j = right;
for ( ; ;) {
while (a[i] < pivot){ ++i; }
while (pivot < a[j]){ --j; }
if (i < j){
swap(a[i], a[j]);
}
else break;
}
if (left < i-1) QuickSort(a, left, i - 1); // store small element
if (i+1 < right) QuickSort(a, i + 1, right); // store large element
}
void快速排序(向量&a、左整数、右整数){
int pivot=a[(左+右)/2];
//开始分区
int i=左,j=右;
对于(;;){
而(a[i]
void QuickSort(vector&a){QuickSort(a,0,a.size()-1);}
?使用调试器时,哪个语句会导致问题?语句中的变量值是什么?
void QuickSort(vector<int> &a, int left, int right) {
int pivot = a[(left + right) / 2];
// begin partitioning
int i = left, j = right;
for ( ; ;) {
while (a[i] < pivot){ ++i; }
while (pivot < a[j]){ --j; }
if (i < j){
swap(a[i], a[j]);
}
else break;
}
if (left < i-1) QuickSort(a, left, i - 1); // store small element
if (i+1 < right) QuickSort(a, i + 1, right); // store large element
}