这段非递归的快速排序代码错哪了
这段非递归的快速排序代码哪里错了?
写了个非递归的快速排序,建了个栈,没用模板库的,但下面主函数里第二种情况运行时会出错,在VS2010上编译,
错误是:HEAP CORRUPTION DETECTED:after Normal block(#88) at 0x00244E70
单步了好几次都没有发现,请高手帮看,要怎么修改??
------解决方案--------------------
楼主的stack开小了,在第二例里面,最多存放了4个吧,但是好像你只开辟了容量为3的数组,导致写入的位置错错了。所以delete的时候crash掉了
写了个非递归的快速排序,建了个栈,没用模板库的,但下面主函数里第二种情况运行时会出错,在VS2010上编译,
错误是:HEAP CORRUPTION DETECTED:after Normal block(#88) at 0x00244E70
单步了好几次都没有发现,请高手帮看,要怎么修改??
- C/C++ code
//划分函数 template<class T> int Partition(T* a,int left,int right) { T pivot = *(a+right); while(left<right) { while(*(a+left)<pivot && left<right) left++; if(left<right) *(a+right--) = *(a+left); while(*(a+right)>pivot && left<right) right--; if(left<right) *(a+left++) = *(a+right); } *(a+left) = pivot; return left; } //快速排序(非递归) template<class T> void sort(T* arr,int len) { if(len == 1) return; int left = 0; int right = len - 1; int *stack = new int[right-left+1]; int top = 0; int mid; stack[top++] = left; stack[top++] = right; while(top>0) { right = stack[--top]; left = stack[--top]; if(left<right) { mid = Partition(arr,left,right); if(mid-left > right-mid) { stack[top++] = left; stack[top++] = mid-1; if (right > mid) { stack[top++] = mid + 1; stack[top++] = right; } } else { stack[top++] = mid + 1; stack[top++] = right; if(mid > left) { stack[top++] = left; stack[top++] = mid - 1; } } } } delete[] stack; } int _tmain(int argc, _TCHAR* argv[]) { //下面这个可以通过 int arr[] = {4,3,2}; sort(arr,3); //print arr... //这个不能通过 int arr2[] = {2,2,2}; sort(arr2,3); //.... return 0; }
------解决方案--------------------
楼主的stack开小了,在第二例里面,最多存放了4个吧,但是好像你只开辟了容量为3的数组,导致写入的位置错错了。所以delete的时候crash掉了