【发布时间】:2020-06-05 08:43:58
【问题描述】:
有人可以指出我的代码中的错误吗?很抱歉函数参数的名称具有误导性 - rptr 应该是右值或其他东西等,我一直在改变一些东西。 大部分应该使用指针来完成。 我认为错误可能在 partArr 中,返回无效变量,但我真的不知道。
#include <iostream>
const int ArSize = 10;
void swap(int *lptr, int *rptr) {
int tempV = *lptr;
*lptr = *rptr;
*rptr = tempV;
}
int partArr(int *arr, int lptr, int rptr) {
int pivot = (lptr + rptr) / 2;
int * leftP = &lptr;
int * rightP = &rptr;
while (true) {
while (arr[*rightP] >= pivot) --(*rightP);
while (arr[*leftP] <= pivot) ++(*leftP);
if(*rightP > *leftP) {
swap(leftP,rightP);
--(*rightP);
++(*leftP);
}
else {
return rptr;
}
}
}
void quickSort(int *arr, int ptrL, int ptrR) {
if (ptrR > ptrL) {
int arr_piv = partArr(arr, ptrL, ptrR);
quickSort(arr, ptrL, arr_piv - 1);
quickSort(arr,arr_piv+1,ptrR);
}
}
int main() {
int tab[ArSize] = {10, 40, 30, 4, 3, 312, 3, 4, 1};
int ptrL = tab[0];
int ptrR = tab[ArSize - 1];
quickSort(tab, ptrL, ptrR);
for (int x : tab)
std::cout << x << " ";
return 0;
}
【问题讨论】:
-
有什么问题?你怎么知道代码有问题?有错误吗?输出错误?您在使用调试器时发现了什么?
-
是的,我应该提到,该数组的顺序根本没有改变,我目前无法使用调试器。
-
为什么无法使用调试器?
-
将索引变量命名为“lptr”和“rptr”会令人困惑。它们不是指针,它们的存储位置完全无关。
-
我用的不是我的电脑,除了我认为这里的错误很明显,所以我完全是菜鸟看不到。我只是很好奇那里出了什么问题。
标签: c++ algorithm pointers quicksort