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

插入排序法,是这样的吗?多谢

2012-02-15 
求助:插入排序法,是这样的吗?谢谢!StructAnimalSrklFall{floatFallStartTime开始下降时间BoolAnimalSrklF

求助:插入排序法,是这样的吗?谢谢!
Struct     AnimalSrklFall
      {
            float   FallStartTime;   开始下降时间
            Bool   AnimalSrklFlag;   为真标志          
      };
     
      AnimalSrklFall   MyAnimalSrklFall[11];
     
      //-------------------------------------------------红色动物--------------------------------------------
        if   (MyAnimalSrklFall[10].AnimalSrklFlag)
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY11);                   //动画棍子上的熊猫
}

if   (MyAnimalSrklFall[9].AnimalSrklFlag)
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY10);                   //动画棍子上的熊猫
}

if   (MyAnimalSrklFall[8].AnimalSrklFlag)
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY9);                   //动画棍子上的熊猫
}

if   (MyAnimalSrklFall[7].AnimalSrklFlag)
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY8);                   //动画棍子上的熊猫
}

        if   (AnimalSrklFlag[6])
{
                  MyAnimalSrklFall[6].AnimalSrklFlag);                   //动画棍子上的熊猫
}

if   (AnimalSrklFlag[5])
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY6);                   //动画棍子上的熊猫
}

if   (MyAnimalSrklFall[4].AnimalSrklFlag)
    {
                    AniMoveRodPanda-> Render(442,AnimalFallRedY5);                   //动画棍子上的熊猫
}

if   (MyAnimalSrklFall[3].AnimalSrklFlag)
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY4);                   //动画棍子上的熊猫
}

if   (MyAnimalSrklFall[2].AnimalSrklFlag)
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY3);                   //动画棍子上的熊猫
}

if   (MyAnimalSrklFall[1].AnimalSrklFlag)
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY2);                   //动画棍子上的熊猫
}

  if   (MyAnimalSrklFall[0].AnimalSrklFlag)
{
                    AniMoveRodPanda-> Render(442,AnimalFallRedY1);                   //动画棍子上的熊猫
}
      //-------------------------------------------------红色动物--------------------------------------------
   


   
    请教:
    如果为真,则就需要执行
    因为是图片渲染,所以后渲染的图片,就会渲染在上层
   
    我需要,在这些条件为真的   中
    FallStartTime   越小的,就越后执行(也就是说后渲染)
   
   
   
    我上面的这段程序是不行的,
    因为     MyAnimalSrklFall[2].FallStartTime   是可能小于   MyAnimalSrklFall[1].FallStartTime  
    这样我的程序,就不行了!
   
   
    这样的程序要怎么写啊?
 

//----------------------------------上面是原帖----------------------------

HW121   大哥的回复是:
把MyAnimalSrklFall[11]   的索引号   按   FallStartTime   由由大到小排序(排序方法可自选)


int   AnimalIndex[11];     //索引号
int   AnimalExecN   =   0;     //需要执行次数
 
//插入排序
for(int   i=10;   i   > =0;   i--)
{
if   (MyAnimalSrklFall[i].AnimalSrklFlag)
      {
      for(int   j   =   0;   j   <   AnimalExecN;   j++)
              if(MyAnimalSrklFall[i].FallStartTime   >   MyAnimalSrklFall[AnimalIndex[j]].FallStartTime)     {
                      for(int   k   =   AnimalExecN;   k   >   j;   k--)
                              AnimalIndex[k]   =   AnimalIndex[k-1];    
                      break;
                      }        
        AnimalIndex[j]   =   i;      
        AnimalExecN++;
        }
}


可是:
for(int   j   =   0;   j   <   AnimalExecN;   j++)   可以吗?

是不是:
//插入排序
for(int   i=10;   i   > =0;   i--)
{
      for(int   j   =   0;   j   <=   AnimalExecN;   j++)
          {
              if(MyAnimalSrklFall[i].FallStartTime   >   MyAnimalSrklFall[AnimalIndex[j]].FallStartTime)  
                  {
                      for(int   k   =   AnimalExecN;   k   >   j;   k--)
                              {
                                    AnimalIndex[k]   =   AnimalIndex[k-1];
                              }    
                      break;
                      }
            }        
        AnimalIndex[j]   =   i;      
        AnimalExecN++;
}


这样啊?

谢谢!


[解决办法]
1. 插入排序一般用List实现,因为需要插入,用数组效率最低
2. 插入排序是从一个队列插入到另外一个已经排序好的队列,不是在同一个队列上操作

建议还是老实去看数据结构书,上面应该有详细描述

热点排行