快排过程中参数会是负数?
- C/C++ code
void QSort(int l, int r){ int lp = l, rp = r, key = (l + r) >> 1; while (lp < rp) { while (a[lp] < key) lp++; while (a[rp] > key) rp--; if (lp <= rp) swap(&a[lp++], &a[rp--]); } if (l < rp) QSort(l, rp); if (lp < r) QSort(lp, r);}
如果把int换成unsigned,排很多数据会越界错误,而int就不会错,快排过程中参数会是负数?
[解决办法]
当程序递归到lp=0,rp=1并且a[lp]<a[rp]的时候,
- C# code
while (a[lp] < key) lp++; while (a[rp] > key) rp--;