⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 起泡法.cpp

📁 起泡法源代码
💻 CPP
字号:
// 起泡法.cpp : 定义控制台应用程序的入口点。
//
//本文对排序中最常见的起泡法进行分析,发现在实现单向起泡的同时可以实现双向起泡,从而实现了冒泡算法的改进,提高了运算速度。 
 // 关键字:程序设计、起泡、双向起泡、VC++ 
  //排序是在程序设计中常碰到的问题,排序算法也有很多种。起泡法是众所周知的排序算法,
//其原理是每次将相邻两个数进行比较,较大的下沉。其的主程序段如下(用VC++实现): 
Void Bubble Sort (int* pData,int Count) 
{ 
 Int iTemp; 
 for(int i=1;i { 
  For (int j=Count-1;j>=i;j--) 
  { 
   if(pData[j]   { 
    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]   { 
    iTemp = pData[i]; 
    pData[i] = pData[i-1]; 
    pData[i-1] = iTemp; 
    t = i; 
   } 
  } 
  left = t+1; 
  //反向的部分 
  for(i=left;i  { 
   if(pData[i]   { 
    iTemp = pData[i]; 
    pData[i] = pData[i-1]; 
    pData[i-1] = iTemp; 
    t = i; 
   } 
  } 
  right = t-1; 
 }while(left<=right); 
} 
  //分析上面的程序段我们可以发现正向起泡时第一次循环找出了最小数,反
//向起泡第一次循环找到最大数。很显然在一次循环中即可以找到一个最小的数还可以找到一个最大的数,
//所以用双向冒泡排序的交换的次数减少了,从而达到了优化起泡法的作用。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -