• 回顾C#经典算法冒泡排序


    冒泡算法的原理:

    • 比较相邻的两个数字,如果第一个数字比第二个数字大,则交换它们位置
    • 从开始第一对比较到结尾最后一对,最后一个数字就是最大数
    • 除了最后一个数字,再次从开始第一对比较到最后一对,得出第二大的数字
    • 重复上面操作,直到没有任何一对数字需要比较

    举例说明:要排序数组:int[] arr={6,3,8,2,9,1};

    第一趟排序:

        第一次排序:6和3比较,6大于3,交换位置: 3 6 8 2 9 1

        第二次排序:6和8比较,6小于8,不交换位置:3 6 8 2 9 1

        第三次排序:8和2比较,8大于2,交换位置: 3 6 2 8 9 1

        第四次排序:8和9比较,8小于9,不交换位置:3 6 2 8 9 1

        第五次排序:9和1比较:9大于1,交换位置: 3 6 2 8 1 9

        第一趟总共进行了5次比较, 排序结果: 3 6 2 8 1 9


    第二趟排序:

        第一次排序:3和6比较,3小于6,不交换位置:3 6 2 8 1 9

        第二次排序:6和2比较,6大于2,交换位置: 3 2 6 8 1 9

        第三次排序:6和8比较,6大于8,不交换位置:3 2 6 8 1 9

        第四次排序:8和1比较,8大于1,交换位置: 3 2 6 1 8 9

        第二趟总共进行了4次比较, 排序结果: 3 2 6 1 8 9


    第三趟排序:

        第一次排序:3和2比较,3大于2,交换位置: 2 3 6 1 8 9

        第二次排序:3和6比较,3小于6,不交换位置:2 3 6 1 8 9

        第三次排序:6和1比较,6大于1,交换位置: 2 3 1 6 8 9

        第二趟总共进行了3次比较, 排序结果: 2 3 1 6 8 9


    第四趟排序:

        第一次排序:2和3比较,2小于3,不交换位置:2 3 1 6 8 9

        第二次排序:3和1比较,3大于1,交换位置: 2 1 3 6 8 9

        第二趟总共进行了2次比较, 排序结果: 2 1 3 6 8 9


    第五趟排序:

        第一次排序:2和1比较,2大于1,交换位置: 1 2 3 6 8 9

        第二趟总共进行了1次比较, 排序结果: 1 2 3 6 8 9


    最终结果:1 2 3 6 8 9


    从上面可以得出:N个数字进行排序,需要经过N-1趟排序,每i趟排序N-i次
    使用双重循坏,外层控制循坏多少趟,内层控制每趟循坏的次数

    for (int i = 0; i < list.Length-1; i++)
    {
           for (int j = 0; j < list.Length-1-i; j++)
           {
                 //交换位置
           }
    }
    

    代码实现:

    using System;
    
    namespace 冒泡排序
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] arr = new[] { 2, 4, 1, 68, 43, 21 };
                int temp = 0;
                for (int i = 0; i < arr.Length - 1; i++)  //外层循环控制排序趟数
                {
                    for (int j = 0; j < arr.Length - 1 - i; j++)  //内层循环控制每一趟排序多少次
                    {
                        if (arr[j] > arr[j + 1])
                        {
                            temp = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = temp;
                        }
                    }
                }
    
                foreach (var ar in arr)
                {
                    Console.Write(ar + " ");
                }
                Console.ReadLine();
    
            }
        }
    }
    

    实现的冒泡排序:

  • 相关阅读:
    ZJOI2019二轮游记
    Luogu P5284 [十二省联考2019]字符串问题
    Luogu P5309 [Ynoi2012]D1T1
    Luogu P5292 [HNOI2019]校园旅行
    LOJ #6052. 「雅礼集训 2017 Day11」DIV
    Luogu P5279 [ZJOI2019]麻将
    LOJ #6060. 「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set
    Luogu P5283 [十二省联考2019]异或粽子
    Luogu P5290 [十二省联考2019]春节十二响
    Luogu P5285 [十二省联考2019]骗分过样例
  • 原文地址:https://www.cnblogs.com/ButterflyEffect/p/10255292.html
Copyright © 2020-2023  润新知