今天,看邓老师的数据结构,尝试写了下快速排序算法。写完之后,调试发现无法跳出递归:
#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]);
}
else
j++;
}
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 的情况,但比对操作( == )为啥会产生这种越界呢?