科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual C++下对冒泡排序算法的改进

Visual C++下对冒泡排序算法的改进

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文对排序中最常见的起泡法进行分析,发现在实现单向起泡的同时可以实现双向起泡,从而实现了冒泡算法的改进,提高了运算速度。

作者:曾红武 来源:计算机与信息技术 2007年10月17日

关键字: Visual C++ 冒泡 排序算法

  • 评论
  • 分享微博
  • 分享邮件
摘 要:本文对排序中最常见的起泡法进行分析,发现在实现单向起泡的同时可以实现双向起泡,从而实现了冒泡算法的改进,提高了运算速度。

  关键字:程序设计、起泡、双向起泡、VC++

  排序是在程序设计中常碰到的问题,排序算法也有很多种。起泡法是众所周知的排序算法,其原理是每次将相邻两个数进行比较,较大的下沉。其的主程序段如下(用VC++实现):

Void Bubble Sort (int* pData,int Count)
{
 Int iTemp;
 for(int i=1;i<Count;i++)
 {
  For (int j=Count-1;j>=i;j--)
  {
   if(pData[j]<pData[j-1])
   {
    iTemp = pData[j-1];
    pData[j-1] = pData[j];
    pData[j] = iTemp;
   }
  }
 }
}

  我们分析上述程序段可以发现起泡法是从一端开始比较的,第一次循环就是把最小数上升到第一位置,第二次循环就是把第二最小数上升到第二位置。如此循环实现数据的排序。那么我们是否可以找到最小数的同时找到最大数呢?当然可以。方法是在一端起泡时同时在另一端也进行起泡。即反向起泡。下面的程序段实现的是双向起泡:

void Bubble2Sort(int* pData,int Count)
{
 int iTemp;
 int left = 1;
 int right =Count -1;
 int t;
 do
 {
  //正向的部分
  for(int i=right;i>=left;i--)
  {
   if(pData[i]<pData[i-1])
   {
    iTemp = pData[i];
    pData[i] = pData[i-1];
    pData[i-1] = iTemp;
    t = i;
   }
  }
  left = t+1;
  //反向的部分
  for(i=left;i<right+1;i++)
  {
   if(pData[i]<pData[i-1])
   {
    iTemp = pData[i];
    pData[i] = pData[i-1];
    pData[i-1] = iTemp;
    t = i;
   }
  }
  right = t-1;
 }while(left<=right);
}

  分析上面的程序段我们可以发现正向起泡时第一次循环找出了最小数,反向起泡第一次循环找到最大数。很显然在一次循环中即可以找到一个最小的数还可以找到一个最大的数,所以用双向冒泡排序的交换的次数减少了,从而达到了优化起泡法的作用。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章