【排序算法】排序算法之冒泡排序

浪子不回头ぞ 提交于 2019-12-28 03:47:31

  最近在学习排序算法,就排序算法中的四大经典排序:冒泡排序快速排序选择排序插入排序。会出一系列的讲解排序算法的博客。

一、冒泡排序的思想

  冒泡,简单而言,现在我有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 }

  打印结果如下:

 

  就此,冒泡排序就完成了!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!