zoukankan      html  css  js  c++  java
  • 回顾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();
    
            }
        }
    }
    

    实现的冒泡排序:

  • 相关阅读:
    POJ 3258 (NOIP2015 D2T1跳石头)
    POJ 3122 二分
    POJ 3104 二分
    POJ 1995 快速幂
    409. Longest Palindrome
    389. Find the Difference
    381. Insert Delete GetRandom O(1)
    380. Insert Delete GetRandom O(1)
    355. Design Twitter
    347. Top K Frequent Elements (sort map)
  • 原文地址:https://www.cnblogs.com/ButterflyEffect/p/10255292.html
Copyright © 2011-2022 走看看