zoukankan      html  css  js  c++  java
  • 【排序算法】排序算法之冒泡排序

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

    一、冒泡排序的思想

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

      打印结果如下:

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

  • 相关阅读:
    The Tower of Hanoi
    POJ 3259:Wormholes
    第二数学归纳法
    Josephus Problem
    想成为Java高手的25个学习目标
    How to find a cycle of length 4?
    Fabonacci Numbers
    通过参数离线安装SharePoint 2010[转]
    Sharepoint2010文档库权限问题
    BizTalk 2010 学习笔记——第一章 BizTalk 2010 概述
  • 原文地址:https://www.cnblogs.com/janneystory/p/3564946.html
Copyright © 2011-2022 走看看