【排序算法】排序算法之冒泡排序
最近在学习排序算法,就排序算法中的四大经典排序:冒泡排序、快速排序、选择排序、插入排序。会出一系列的讲解排序算法的博客。
一、冒泡排序的思想
冒泡,简单而言,现在我有5个小球,每个小球的重量不一(假设小球会漂浮),浮力与重力呈反比,球越重则沉到最底下,越轻则漂浮到最上面。这些球我把他们一股脑的扔到水里的时候,他们会根据自身的重量找到自己悬浮的位置,在“找位置”的过程中越轻的小球就会超越身边比他重的小球,往上漂浮。这就是冒泡。
冒泡排序就是采用的这种精髓,让小球们逐一和身边的小球比较,最轻的小球不断上升、越重的小球越在最下。
我们给这5个小球赋以不同的重量,现在五个小球的重量分别是100,15,76,24,55.
按照咱们刚刚分析的冒泡排序,咱们对这五个小球按从大到小进行排列:
首先用100和15相比较,100>15,符合由大到小的顺序,位置保持不变,五个小球的顺序为 100,15,76,24,55;
再用15和76相比较,15>76?显然是不对的,那么15和76交换顺序,五个小球的顺序为 100,76,15,24,55;
再用15和24相比较,显然位置需要调换,调换后的顺序为:100,76,24,15,55;
再用15和55相比较,位置需要调换,调换后的顺序为:100,76,24,55,15;
交换了4次之后,15为最后一位,最小的数归位了!可是革命尚未成功啊,还有其他的没有归位呢,那么咱们继续!
依旧是第一位的和第二位相比较,判断是否需要调换位置,
第二位和第三位相比较,判断是否需要调换位置,
第三位和第四位相比较,判断是否需要调换位置,
第四位和第五位相比较?不用了吧!咱们刚刚第一趟已经将最小的一位归位了,所以第二趟只需要比较3次,至此第二小的归位了!
…………………………
依次类推,我们还需要第3趟,比较2次,第3小的归位了!
第4趟比较1次,第4小的归位了!
第5趟?NO!第4小归为后,只剩一个位置了,老大的宝座,那么自然是不用再比较了,非第一个莫属啦!就像是一个武林大赛中,一个人打败了所有人,那么他自然是武林盟主啦!
到此,我们来总结一下,n个数做排序,需要比较n-1趟,每一趟都需要从第一位和第二位相比较开始,比较次数=数字总数-趟;
二、冒泡排序的代码实现
由此分析,用C#在控制台程序上写(好久没写过控制台程序啦 ),如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace maopao 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 int[] ballWeight={100,15,76,24,55}; 13 for (int i = 1; i <=ballWeight.Length-1; i++) //i为趟数,5个数需要比较4趟 14 { 15 for (int j = 0; j <=ballWeight.Length-i-1;j++)//ballWeight.Length-i为每一趟需要比较的次数,次数=数字总数-趟 16 { 17 int temp = 0;//中间值 18 if (ballWeight[j]<ballWeight[j+1]) 19 { 20 //左边的小于右边的,需要交换 21 temp = ballWeight[j]; 22 ballWeight[j] = ballWeight[j + 1]; 23 ballWeight[j + 1] = temp; 24 } 25 } 26 } 27 foreach (int item in ballWeight) 28 { 29 Console.Write(item+" "); 30 } 31 Console.ReadKey(); 32 } 33 } 34 }
打印结果如下:
就此,冒泡排序就完成了!