前言
写程序的可能会经常碰到一些奇怪的问题,表面上看真是发现不了一点问题。其实可以检查一下是否是类型有符号和无符号导致的问题。有符号的0-1=-1,无符号的0-1可就不是等于1,这个问题大家都知道,一到实际应用起来,往往就忽略了这个差别。下面列举一些自己写程序遇到的这个问题,仅供个人编程的一个警钟。
1. 下面是一个有问题的程序,请有兴趣的同志更正
template <class T>
size_t Partition(T R[], size_t low, size_t high)
{
size_t i = low, j = high;
T pivot = R[low];
while(i < j)
{
for(; i < j && pivot < R[j] ; j--);
if(i < j)
{
R[i] = R[j];
i++;
for(; i < j && pivot > R[i] ; i++);
if(i < j)
{
R[j] = R[i];
j--;
}
}
}
R[i] = pivot;
return i;
}
template <class T>
void QuickSort(T R[], size_t low, size_t high)
{
size_t i = low, j = high;
T pivot = R[low];
if(low < high)
{
size_t pivotpos = Partition(R, low, high);
QuickSort(R, low, pivotpos-1);
QuickSort(R, pivotpos+1, high);
}
}