判断时用比较(< or >) 替换 比对(==)防止递归越界

来源:互联网 发布:淘宝网新百伦运动鞋 编辑:程序博客网 时间:2024/06/04 23:36

今天,看邓老师的数据结构,尝试写了下快速排序算法。写完之后,调试发现无法跳出递归:

#include <iostream>using namespace std;void swap(int& a, int& b){int temp = a;a = b;b = temp;}void searchfast(int* A, int lo, int hi){if(lo == hi)return;if(lo +1  == hi);{if(A[hi] < A[lo]) swap(A[lo], A[hi]);return ;}int i = 0; int j = 0;swap(A[lo], A[lo + 1]);for(; hi - j > lo + i; ){if (A[hi - j] < A[lo]){i++; swap(A[lo + i], A[hi - j]);}elsej++;}searchfast(A, lo, lo + i);searchfast(A, lo + i + 1, hi);}int main(){int A[10] = { 5,6,1,3,8,9,2,7,0,4};searchfast(A, 0, 9);for(int i = 0; i < 10; i++)cout << A[i] <<endl;return 0;}
调试发现,分而治之的递归出现了错误,递归中出现了lo > hi 的情况(好难理解。。。。。),然后把第二个递归基的比对:
if(lo +1 == hi);
修改为比较
if(lo + 2 > hi);

然后就没问题了。。。。
这得好好分析啊。。。。可以理解比较操作会避免 lo > hi 的情况,但比对操作( == )为啥会产生这种越界呢?

0 0
原创粉丝点击