前言
交换排序有两种形式,一种是冒泡,另一种是快速排序。今天总结的是冒泡排序。
冒泡排序
冒泡排序法是一种交换排序方法,其过程是首先将第一个记录的键值和第二个记录的键值进行比较,若为逆序(R[1].key>R[2].key),则将这两个记录交换,然后继续比较第二个和第三个记录的键值,以此类推,直到完成第n-1个记录和第n个记录的键值比较交换位置,此为一趟冒泡。
效果图
代码
类C语言描述
void BubbleSort(List R,int n)
{
int i,j,temp,endsort;//定义四个变量
for(i=1;i<=n-1;i++)
{
endsort=0;//初始化标志
for(j=1;j<=n-i-1;j++)
{
if(R[j].key>R[j+1].key)//两两判断
{
temp=R[j];//交换
R[j]=R[j+1];
R[j+1]=temp;
endsort=1;//标志位为1,证明此次排序有位置的交换
}
}
if(endsort==0)break;//如没有位置的交换,说明排序完成,退出
}
}
C#描述
static void Main(string[] args)//客户端主程序
{
int[] R = { 6, 5, 3, 1, 8, 7, 2, 4 };//定义数组
int count = BubbleSort(R);
Console.WriteLine("排序后数组:");
for (int i = 0; i <= R.Length-1; i++)
{
Console.Write(R[i] + ",");
}
Console.WriteLine();
Console.WriteLine("交换次数:" + count);
Console.ReadKey();
}
private static int BubbleSort(int[] R)//冒泡排序
{
int count = 0;
int temp;
int endsort;
int n = R.Length;
for (int i = 0; i < n-1; i++)
{
endsort = 0;
for (int j = 0; j < n-i-1; j++)
{
if (R[j]>R[j+1])
{
temp = R[j];
R[j] = R[j + 1];
R[j + 1] = temp;
endsort = 1;
count++;
}
}
if(endsort==0)
{
break;
}
}
return count;
}
注:这里有一个比较不错的想法,就是加入了endsort判断位,当一次冒泡过程中,没有发现气泡位置的交换,说明排序已经完成,减少了排序的次数。提高了效率。
冒泡排序有一个特别大的缺点,就是速度特别的慢,当待排数量很大时,不推荐使用冒泡排序。
总结
各种排序对比图
另附:冒泡排序舞蹈视频