关于动态数组CArry的字符串排序有关问题
关于动态数组CArry的字符串排序问题void FilePack::Sort(){BOOL bNotDone TRUEwhile (bNotDone){bNotDo
关于动态数组CArry的字符串排序问题
void FilePack::Sort()
{
BOOL bNotDone = TRUE;
while (bNotDone)
{
bNotDone = FALSE;
for(int pos = 0;pos < m_filename.GetUpperBound();pos++)
bNotDone |= CompareAndSwap(pos);
}
}
BOOL FilePack::CompareAndSwap(int pos)
{
CString temp;
int posFirst = pos;
int posNext = pos + 1;
if (m_filename.GetAt(posFirst).CompareNoCase(m_filename.GetAt(posNext)) > 0)
{
temp = m_filename.GetAt(posFirst);
m_filename.SetAt(posFirst, m_filename.GetAt(posNext));
m_filename.SetAt(posNext, temp);
return TRUE;
}
return FALSE;
}
小弟最近写一个程序,需要将CArry,(m_filename)中的字符串进行排序。如上,是在网上找到的,小弟想问一下关于红字区域的解读。并且排序是好使,从小到大,但是如果出现如下情况:
1 2 3 ... 11 12 13 14
就会出现如下排序
1 11 12 13 14 2 3 ...
如何修改才可?求赐教。
或者有大神能够写一个排序的函数,不胜感激。
[解决办法]看你的意思是要按数字大小排序啊,那你的比较函数就不能按字符串比较了,要转为数字比较
[解决办法]++
在数组中结构中增加一个成员,保存相应的数字,然后用数字排序。
似乎用vector更方便些。
[解决办法]bNotDone是个标志符
我们可以发现bNotDone用的是一个或方法。也就是说一旦CompareAndSwap成功,这个bNotDone值就是TRUE;
也就是告诉系统还需要继续排序。
当从头到尾排序下来bNotDone都是False,(一次都没有交换)就是告诉系统,排序已经完成了。
就这么简单