什么叫泡沫排序算法

chaye12 2008-05-21 09:18:36
各位大哥,小弟才疏学浅,因为学.net才学的C#,基础很差,不知道什么是泡沫排序算法,请各位给讲讲,谢过!
...全文
327 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdnshao 2008-05-21
  • 打赏
  • 举报
回复
public void BubbleSort(int[] R) 
  {
   int i,j,temp; //交换标志

   bool exchange;

   for(i=0; i<R.Length; i++) //最多做R.Length-1趟排序
   {
   exchange=false; //本趟排序开始前,交换标志应为假

   for(j=R.Length-2; j>=i; j--)
   {
   if(R[j+1]<R[j]) //交换条件
   {
    temp=R[j+1];
    R[j+1]=R[j];
    R[j]=temp;

    exchange=true; //发生了交换,故将交换标志置为真
   }
   }

   if(!exchange) //本趟排序未发生交换,提前终止算法
   {
   break;
   }
   }
  }
csdnshao 2008-05-21
  • 打赏
  • 举报
回复
实际就是冒泡排序算法
Tll_W 2008-05-21
  • 打赏
  • 举报
回复
冒泡排序可以让你懂得循环和比较的用法。。。。具体楼上的都说的很相信了
个人感觉初学者懂这个还是很有必要的、。。。。
zhengshaodong 2008-05-21
  • 打赏
  • 举报
回复
冒泡是最基本的 不过在大量数据的排序上 冒泡性能比较差
neT00 2008-05-21
  • 打赏
  • 举报
回复
2个2个比较,大的放在前面
whycom 2008-05-21
  • 打赏
  • 举报
回复
只听说过泡沫奶茶
apollolb2005 2008-05-21
  • 打赏
  • 举报
回复
用学会用搜索
叶子 2008-05-21
  • 打赏
  • 举报
回复
冒泡排序的基本概念是:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束,在最后的数必是所有数中的最小数。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将大数放前,小数放后,一直比较到最小数前的一对相邻数,将大数放前,小数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。

由于在排序过程中总是大数往前放,小数往后放,相当于气泡往上升,所以称作冒泡排序。

用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。

产生

在许多程序设计中,我们需要将一个数列进行排序,以方便统计,常见的排序方法有冒泡排序,二叉树排序,选择排序等等。而冒泡排序一直由于其简洁的思想方法和比较高的效率而倍受青睐。

排序过程

设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。

算法示例

49 13 13 13 13 13 13 13
38 49 27 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65
27 27 76 97 76 76 76 76
49 49 49 76 97 97 97 97

Procedure BubbleSort(Var R : FileType) //从下往上扫描的起泡排序//
Begin
For I := 1 To N-1 Do //做N-1趟排序//
begin
NoSwap := True; //置未排序的标志//
For J := N - 1 DownTo 1 Do //从底部往上扫描//
begin
If R[J+1]< R[J] Then //交换元素//
begin
Temp := R[J+1]; R[J+1 := R[J]; R[J] := Temp;
NoSwap := False
end;
end;
If NoSwap Then Return//本趟排序中未发生交换,则终止算法//
end
End; //BubbleSort//
该算法的时间复杂性为O(n2),算法为稳定的排序方

冒泡排序算法具体代码
#include <iostream.h>
void BubbleSort(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 main()
{
int data[] = {10,9,8,7,6,5,4};
BubbleSort(data,7);
for (int i=0;i<7;i++)
cout<<data<<" ";
cout<<"\n";
}

冒泡排序Ruby代码
def bubble(arr)
(arr.length-1).downto(1) do |j|
a1 = arr.dup
j.times do |i|
if arr > arr[i+1]
arr,arr[i+1] = arr[i+1],arr
end
end
break if a1 == arr
end
arr
end

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧