• 01.冒泡排序


    1、概述:

    1.  已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。
    2. 再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。
    3.  这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。
    4. 再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。
    5. 降序排列与升序排列相类似,若a[1]小于a[2]则交换两者的值,否则不变,后面以此类推。
    6. 总的来讲,每一轮排序后最大(或最小)的数将移动到数据序列的最后,理论上总共要进行n(n-1)/2次交换。
    7.  优点:稳定
    8. 时间复杂度:理想情况下(数组本来就是有序的),此时最好的时间复杂度为o(n),最坏的时间复杂度(数据反序的),此时的时间复杂度为o(n*n) 。
    9. 冒泡排序的平均时间负责度为o(n*n).
    10. 缺点:慢,每次只移动相邻的两个元素。

    2、图解:

    3、代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace 冒泡排序
     8 {
     9     class Program
    10     {
    11 
    12         static void Main(string[] args)
    13         {
    14             int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48,1,22 };
    15             BubbleSort(data);
    16             foreach (var temp in data)
    17             {
    18                 Console.Write(temp + " ");
    19             }
    20             Console.ReadKey();
    21         }
    22 
    23         //以下展示的是两种实现方法,推荐使用第一种:
    24 
    25         /// <summary>
    26         /// 最底下元素对应最小索引
    27         /// </summary>
    28         /// <param name="dataArray"></param>
    29         static void BubbleSort(int[] dataArray)
    30         {
    31             for (int i = 0; i < dataArray.Length; i++)          //有多少个数就要遍历多少趟
    32             {
    33                 for (int j = 0; j < dataArray.Length - 1 - i; j++)
    34                 //每一次会将最小的一个排在首位,所以次数会依次减少   -i只是为了性能考虑,因为每一次都会将最大值放到最后,所以最后一个值可以随趟数进行减少
    35                 {
    36                     if (dataArray[j] > dataArray[j + 1])  //交换位置
    37                     {
    38                         int temp = dataArray[j];
    39                         dataArray[j] = dataArray[j + 1];
    40                         dataArray[j + 1] = temp;
    41                     }
    43                 }
    44             }
    45         }
    46 
    47         //从上到下
    48         //static void BubbleSort(int[] dataArray)
    49         //{
    50         //    for (int i = 0; i < dataArray.Length; i++)
    51         //    {
    52         //        for (int j = dataArray.Length - 1; j > i; j--)
    53         //        {
    54         //            if(dataArray[j]<dataArray[j-1])         //如果前一个元素大于最后面一个元素则交换位置
    55         //            {
    56         //                int temp = dataArray[j];
    57         //                dataArray[j] = dataArray[j - 1];
    58         //                dataArray[j - 1] = temp;
    59         //            }
    60         //        }
    61         //    }
    62         //}
    63     }
    64 }
  • 相关阅读:
    netbeans中给jpanl添加背景图片制定代码的理解——匿名内部类继承父类
    关于 ASP.NET MVC 中的视图生成
    Python的descriptor (2)
    分享php中四种webservice实现的简单架构方法及实例
    Python 中的 is 和 id
    Python的OO思想
    Python异常记录
    Python单例模式研究
    Python基础笔记
    python 映射列表 学习
  • 原文地址:https://www.cnblogs.com/zhh19981104/p/9458632.html
Copyright © 2020-2023  润新知