简单写了一个增加的函数(从大大小排列),按上面我说的,每次只对一个数据排序(每次10个原理是一样的,程序比较复杂),删除应该更简单
#define MAX_NUM 100
#define BASE_ADDR XXXX //数据在EE里的基址
BYTE bInOrderNum = 0;
BYTE bOrderMap[MAX_NUM] = {0xff}; //记录数据在EE里的偏移地址
void insertdata(BYTE bOrderIndex,BYTE bEEIndex)
{
BYTE i = 0;
for(i = bInOrderNum; i > bOrderIndex; i--)
{
bOrderMap[i] = bOrderMap[i -1];
}
bOrderMap[bOrderIndex] = bEEIndex;
bInOrderNum++;
}
void adddata(BYTE bEEIndex)
{
BYTE bStart, bEnd, i;
if(bInOrderNum == 0)
bOrderMap[bInOrderNum++] = curIndex;
else
{
bStart = 0;
bEnd = bInOrderNum;
do //2分法
{
if(*(BASE_ADDR + bEEIndex) == *(BASE_ADDR + bEnd/2)) //如果相等插入到当前值前面
{
bStart = bEnd/2;
break;
}
else if(*(BASE_ADDR + bEEIndex) > *(BASE_ADDR + bEnd/2))
bEnd = bEnd/2;
else
bStart = bEnd/2;
}while(bStart != bEnd);
insertdata(bStart,bEEIndex);
}
}
|