您的位置:首页 > 其它

例子说冒泡排序

2016-03-31 20:04 239 查看

一、原理:

       1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
       2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
       3.针对所有的元素重复以上的步骤,除了最后一个。
       4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
       如下例中6与5相比较,因为它们不相等,所以需要进行交换位置,把6与5进行交换,然后再进行下一对的比较,6与3,也要进行交换位置,以此类推,直到最后一个数是最大的,每一趟排序都是最大的浮出来,就像金鱼在水中缺氧就会浮到水面,嘴巴一张一闭进行呼吸而形成的吐泡泡一样,总是会不断的有泡泡出来连成一串,很好看。

二、C#中的冒泡排序

例:把{ 6,5,3,1,8,7,2,4 }这个数组按从小到大进行排列:
         /***********************************************
'类 名 称:Bubble
'命名空间:BubbleTest
'创建时间:2016年3月30日
'作 者:Q
'说 明:
'版 本 号:v1.0.0
************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BubbleTest
{
class BubbleOne
{
//创建一个排序的数组
static List<int> list = new List<int>() { 6, 5, 3, 1, 8, 7, 2, 4 };
static void Main(string[] args)
{
Bubble();
PrintList();
}

static void Bubble()
{
int temp = 0;
for (int i = list.Count; i > 0; i--) //数组有N个数,那么用N-1次大循环就可以排完
{
for (int j = 0; j < i - 1; j++) //从数组下标0处开始遍历 i - 1 是刨除已经排好的大数
{

if (list[j] > list[j + 1]) //相邻两个数进行比较,如果前面的数大于后面的数,则将这相邻的两个数进行互换
{
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
PrintList(); //发生过互换,打印出来
}

}
private static void PrintList()
{
foreach (var item in list)
{
Console.Write(string.Format("{0} ", item));
}
Console.ReadLine();

}
}
}


     最后输出的结果是:

                   

   

    冒泡排序动态图:

                   


三、算法的稳定性:

    如果相邻的两个元素是相等的,那咱们也不会无聊到让它们交换位置;如果两个相等的元素没有相邻,那么即使通过前面的两两交换之后两个相邻在一起了,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: