工作总结:MFC自写排序算法(升序)
2014-05-05 09:27
183 查看
最近一个需求里面需要实IP升序排序,用了qsort,结果是内部排序,甚至感觉排序结果不可预测性,于是自己写了一个外部排序。
需求如下:一个指针里面有N条记录,每条记录包含:IP,偏移地址,保留位,均占4个字节,且这N条记录需要按照升序排序。
算法如下:
最后大家讨论,上述方法存在问题:
1.冒泡排序非最优,二分较好;
2.memcpy函数使DWORD类型IP倒序未做处理
最后还是用了qsort函数,上次使用qsort函数导致排序错误是由于下面黄色标记代码出错原因
代码如下:
需求如下:一个指针里面有N条记录,每条记录包含:IP,偏移地址,保留位,均占4个字节,且这N条记录需要按照升序排序。
算法如下:
for (int i = 1; i < m_nCount; i++ )//sort { DWORD dwPre = NULL;//pCurAddr.GetIP()+i DWORD dwNex = NULL; char cTemp[12] = {0}; char cTemp2[12] = {0}; for (int j = m_nCount - 1; j >= i; j--) { memcpy(&dwPre, pLCIndexBuf+ ((j-1)*12), 4); memcpy(&dwNex, pLCIndexBuf+(j*12), 4); if (dwNex > dwPre) { memcpy(&cTemp, pLCIndexBuf + (j*12), 12); memcpy(&cTemp2, pLCIndexBuf + ((j-1)*12), 12); memcpy(pLCIndexBuf + (j*12), cTemp2, 12); memcpy(pLCIndexBuf + ((j-1)*12), cTemp, 12); } } }
最后大家讨论,上述方法存在问题:
1.冒泡排序非最优,二分较好;
2.memcpy函数使DWORD类型IP倒序未做处理
最后还是用了qsort函数,上次使用qsort函数导致排序错误是由于下面黄色标记代码出错原因
代码如下:
qsort(&pLCIndexBuf[0], m_nCount, 12, CompareAMTIndexV6); int CompareAMTIndexV6(const void *a,const void *b) { //CAddr pCurAddr; DWORD pOne = *(DWORD*)a; DWORD pTwo = *(DWORD*)b; //first section of IP Address BYTE byTemp1 = LOBYTE(LOWORD(pOne)); BYTE byTemp2 = LOBYTE(LOWORD(pTwo)); if (byTemp1 != byTemp2) { return ((int)byTemp1 - (int)byTemp2); } //Second section of IP Address byTemp1 = HIBYTE(LOWORD(pOne)); byTemp2 = HIBYTE(LOWORD(pTwo)); if (byTemp1 != byTemp2) { return ((int)byTemp1 - (int)byTemp2); } //Third section of IP Address byTemp1 = LOBYTE(HIWORD(pOne)); byTemp2 = LOBYTE(HIWORD(pTwo)); if (byTemp1 != byTemp2) { return ((int)byTemp1 - (int)byTemp2); } //Fourth section of IP Address byTemp1 = HIBYTE(HIWORD(pOne)); byTemp2 = HIBYTE(HIWORD(pTwo)); if (byTemp1 != byTemp2) { return ((int)byTemp1 - (int)byTemp2); } return *(int*)a - *(int*)b;//升序 }
相关文章推荐
- 工作总结:VS2010/MFC编程入门之十六(对话框:消息对话框)
- 程序猿找工作必练内功:排序算法大总结(五)——线性时间排序算法(计数排序,基数排序,桶排序)
- 程序猿找工作必练内功:排序算法大总结(二)——归并排序算法
- 程序猿找工作必练内功:排序算法大总结(三)——堆排序算法
- 工作总结:MFC使用Windows自带打开对话框
- C++经验总结(4):MFC之工作线程
- 程序猿找工作必练内功:排序算法大总结(一)——简单排序算法
- 工作总结:MFC调用Windows自带新建、保存对话框代码
- 程序猿找工作必练内功:排序算法大总结(六)——shell排序
- 程序猿找工作必练内功:排序算法大总结(四)——快速排序算法
- MFC中常用代码总结
- 《校园封神榜》个人工作总结——第九天
- malloc()函数的工作机制 结构体的总结
- 排序算法总结
- ActiveReports工作总结12——用Designer控件实现用户自定义报表印刷
- 10种排序算法总结
- 排序算法总结
- AIX环境下用磁带进行备份与恢复工作的一点总结
- 总结:MFC中一个对话框的关闭过程 .
- 历年工作主要专业技术总结