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

原创 2006年05月29日 23:26:00
排序是在程序设计中常碰到的问题,排序算法也有很多种。起泡法是众所周知的排序算法,其原理是每次将相邻两个数进行比较,较大的下沉。其的主程序段如下(用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);
}

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

C++ 冒泡排序算法的实现与改进(含笔试面试题)

冒泡排序(Bubble sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月25日 09:41
  • 1584

冒泡排序的改进算法和快速排序

通过实现快速排序让我对排序算法有了更加深入的理解,希望再接再厉。
  • qq_34328833
  • qq_34328833
  • 2016年04月20日 20:40
  • 2010

冒泡排序的改进

通常的冒泡排序         假设按照升序排序。         设数组大小为n;比较相邻的两个数,如果第一个大于第二个,则交换两个数据;这样,第一个排序后,比较了n-1次,最大的数在数组末尾。...
  • u013074465
  • u013074465
  • 2015年03月17日 11:32
  • 1465

【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)

之所以把冒泡排序和选择排序放在一起,是因为二者的实现代码很相似,而且都是最基本的排序方式,非常容易理解和实现。当然,如果仅仅是为了讲述这两种排序方式,那也根本没必要写这篇博文了。和上篇博文一样,我会在...
  • mmc_maodun
  • mmc_maodun
  • 2014年03月02日 09:36
  • 5422

数据结构之排序算法(二)-冒泡排序及改进

冒泡排序算法需要遍历几次数组。每次遍历都要比较连续相邻的元素,如果某一对相邻元素是降序,则互换它们的值,否则,保持不变。由于较小的值像“气泡”一样逐渐浮想顶部,而较大的值沉向底部,所以叫冒泡排序。 ...
  • tuke_tuke
  • tuke_tuke
  • 2015年12月21日 15:10
  • 2132

改进版冒泡排序

冒泡法排序: 改进之处:n个元素比较n-1趟,第i趟比较n-i次 若在其中的某一趟排序中:若始终未发生元素的交换说明已经排序号好,函数结束!...
  • ZongYinHu
  • ZongYinHu
  • 2015年04月26日 19:13
  • 805

C++实现改进的冒泡排序

冒泡排序法(Bubble Sort),即起泡排序并不能改观普通排序的时间复杂度,还是O(n^2)。冒泡排序法是从后往前两两比较,然后遍历整个数组,犹如鱼吐水泡,故起此名。而普通排序法是遍历整个数组,然...
  • FX677588
  • FX677588
  • 2016年10月12日 19:21
  • 756

冒泡排序法(BubbleSort)的改进以及效率比较

冒泡排序法(BubbleSort)的改进以及效率比较
  • kong357385142
  • kong357385142
  • 2011年04月23日 11:06
  • 4638

排序算法(一)——冒泡排序及改进

冒泡排序 冒泡排序的效率很低,但是算法实现起来很简单,因此很适合作为研究排序的入门算法。 基本思想 对当前还未排好序的范围内的全部数,自上而下对相邻的俩个数依次进行比较和调整,让较大的数下沉,较小的数...
  • u012152619
  • u012152619
  • 2015年08月06日 00:02
  • 5810

请编程实现一个冒泡排序算法?

int [] array = new int ; int temp = 0 ; for (int i = 0 ; i { for (int j = i + 1 ; j { if (ar...
  • X_X_OO
  • X_X_OO
  • 2016年09月13日 19:36
  • 1885
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Visual C++下对冒泡排序算法的改进
举报原因:
原因补充:

(最多只允许输入30个字)