首页 | | 管理入口  
 
我的日历
 
最新评论
 
访问统计
 
我找日志
 
获取RRS
我的 Blog:
birdhook 最新的 20 条日志
[燕山月似钩]
[高山流水]
[随笔心情日记]
[读书笔记]
全站 Blog:
全站最新的 20 条日志
 
友情连接
QQQQQQQQQQQQQQQ
 
从N个球中找出M个坏球的算法
作者:遥遥  发表时间:2006-4-1

很抱歉帖子发出去后代码的格式会比较混乱。
这个算法不是最优的,用树结构比较应该在时间复杂度上得到提高。
这是我好几年前写的一个题目,现在正在做毕业设计,刚刚整理一大堆的代码,算是高一段落,现在写代码的心情都没有了。



int CBalls::split(int start, int end)
{
  int i = start,j = end;
  int pivot = Balls[i];
  int equals = 0;

  while(i < j)
  {
    //从后端开始一直查找到比中枢值小的项
    while(i<j && pivot <= Balls[j])
    {  
      if(pivot == Balls[j--]) equals++;
    }

    //将小于中枢值的项提前
    Balls[i] = Balls[j];
    
    //从开始端向后查找比中枢值大的项
    while(i<j && pivot > Balls[i])
      i++;

    //将开始端的比中枢值大或等的项后移
    Balls[j] = Balls[i];
  }
  //中间项赋值
  Balls[i] = pivot;

  //检查中枢值是否为标准值
  if(equals == numBalls - numBadBalls - 1)
  {
    bFind = true;
  
    //记录下标准值所在的范围
    startPos = i;
    endPos = end;
  }

  //返回中枢值位置
  return i;  
}

void CBalls:: qsort(int low, int high)
{
  if(low < high)
  {
    int pivoltLoc = split(low, high);
    
    if(!bFind && pivoltLoc - low > numBalls - numBadBalls)
      qsort(low, pivoltLoc - 1);
    
    if(!bFind && high - pivoltLoc > numBalls - numBadBalls)
      qsort(pivoltLoc + 1 ,high);
  }
}

所属栏目:随笔心情日记  


 

全部分类中有 1 篇日志 | 每页显示 1 篇


{CommentAuthor}:
{CommentContent}

--- {CommentTime} | {CommentEmail} {CommentUrl} {CommentIp}

Design by smallfish
Powered by 5DBlog.com