全分!这个多关键字,每个关键字分别用折半插入排序后,结果很扭曲啊快考试了啊小弟我还在编程

全分求助!这个多关键字,每个关键字分别用折半插入排序后,结果很扭曲啊!快考试了啊!我还在编程
下面是代码!如果你不想看代码,可以听完描叙。要给记录排序,我想得到的结果是记录由小到大排列,每条记录有5个关键字。关键字1的地位>关键字2的地位>关键字3的地位>关键字4的地位>关键字5的地位。我用折半排序的方法,分别对记录排五次序。

结果的到的排序结果是记录的顺序是关键字1由小到大排列,关键字2由大到小排列。。。。以此类推。
这是为什么?
我想得到的结果是记录由小到大排列
C/C++ code

    //开始进行5趟插入排序
    for (key_index=NUM_OF_KEY-1;key_index>=0;--key_index)
    {
        for (i=2;i<recnum+1;++i)
        {
            r[0]=r[i];
            low=1;high=i-1;
            while (low<=high)
            {
                m=(low+high)/2;
                if (RecArray[r[0]].key[key_index]<=RecArray[r[m]].key[key_index])
                {
                    high=m-1;
                }
                else low=m+1;
            }//while
            for (j=i-1;j>=high+1;--j)
            {
                r[j+1]=r[j];  //记录后移
            }
            r[high+1]=r[0];
        }//for
    }//for



------解决方案--------------------
貌似应该先用关键字1排序一遍~
然后再对其中关键字1相同的条目中使用关键字2排序
再对其中关键字2相同的再使用关键字3以此类推
你是每次都对数据按照不同关键字排序了吧?
------解决方案--------------------
如果可以用STL,那么这个问题是很容易解决的。俺最近刚好做过类似的事情,而且各关键字的排序可以独立地进行升降排序,所要做的事情就是自己实现一个comparator。

comparator写法的大致思路是这样的:
1. 首先比较第一个关键字。如果两者不等就直接返回两者比较的结果,当然如果是反序的话,返回的结果也需要反过来。如果两者相等,则比较两者的第二个关键字。
2. 重复1。写成递归或者循环都可以。
------解决方案--------------------
探讨

如果可以用STL,那么这个问题是很容易解决的。俺最近刚好做过类似的事情,而且各关键字的排序可以独立地进行升降排序,所要做的事情就是自己实现一个comparator。

comparator写法的大致思路是这样的:
1. 首先比较第一个关键字。如果两者不等就直接返回两者比较的结果,当然如果是反序的话,返回的结果也需要反过来。如果两者相等,则比较两者的第二个关键字。
2. 重复1。写成递归或……

------解决方案--------------------
应该从低级往高级排序,即从关键字5,4,3,2,1排序
------解决方案--------------------
如158,234,352,456,216
从小到大排序
先从个位数排序的话,同一级别时(10位是一样大的情况下)个位数是按照从小到大排的
以此类推
这种方法能全部排好序
------解决方案--------------------
将if (RecArray[r[0]].key[key_index]<=RecArray[r[m]].key[key_index])改为
if (RecArray[r[0]].key[key_index]<RecArray[r[m]].key[key_index])才是稳定的