首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于动态数组CArry的字符串排序有关问题

2013-01-02 
关于动态数组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,(一次都没有交换)就是告诉系统,排序已经完成了。

就这么简单



热点排行