有人可以指出我的代码中的错误吗?抱歉,函数参数的名称具有误导性-rptr应该是rvalue或诸如此类,我一直在不断更改。大多数应该使用指针来完成。我认为错误可能出在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;
}
这里
int * leftP = &lptr;
int * rightP = &rptr;
您获取函数参数的地址。致电时
swap(leftP,rightP);
然后交换lptr
和rptr
的值。当你写
--(*rightP)
您递减rptr
的值。您实际上从未修改过数组的元素。
我没有CS学历,因此,当我想对数组进行排序时,我使用std::sort
。如果您需要自己练习将其实现,则应该学习如何使用调试器,否则您将始终遇到类似这样的问题。在编码方面变得更好并不是要避免犯错误,而是要知道如何解决错误。