C# 基本语法-冒泡排序

using System;

namespace lesson13_冒泡排序

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("冒泡排序");

            #region 排序的基本概念

            //排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列

            //常用的排序例子

            //8 7 1 5 4 2 6 3 9

            //把上面的这个无序序列 变为 有序(升序或降序)序列的过程

            //1 2 3 4 5 6 7 8 9(升序)

            //9 8 7 6 5 4 3 2 1(降序)

            //在程序中 序列一般 存储在数组当中

            //所有 排序往往是对 数组进行排序

            int[] arr = new int[] { 8, 7, 1, 5, 4, 2, 6, 3, 9 };

            //把数组里面的内容变为有序的

            #endregion

            #region 冒泡排序基本原理

            //8 7 1 5 4 2 6 3 9

            //两两相邻

            //不停比较

            //不停交换

            //比较n轮

            #endregion

            #region 代码实现

            /*for (int j = 0; j < arr.Length; j++)

            {

                for (int i = 0; i < arr.Length-1; i++)

                {

                    if (arr[i] > arr[i + 1])

                    {

                        int x = 0;

                        x = arr[i];

                        arr[i] = arr[i + 1];

                        arr[i + 1] = x;

                    }

                }

            }

            for (int i = 0; i < arr.Length; i++)

            {

                Console.Write(" " + arr[i]);

            }*/

            //优化

            //1.确定位置的数字不用比较了

            //确定一轮后 极值(最大或最小)已经放到了对应的位置(往后放)

            //所以 每完成n轮 后面位置的数 就不用再参与比较了

            /*for (int j = 0; j < arr.Length; j++)

            {

                for (int i = 0; i < arr.Length-1-j; i++)

                {

                    if (arr[i] > arr[i + 1])

                    {

                        int x = 0;

                        x = arr[i];

                        arr[i] = arr[i + 1];

                        arr[i + 1] = x;

                    }

                }

            }

            for (int i = 0; i < arr.Length; i++)

            {

                Console.Write(" " + arr[i]);

            }*/

            //特殊情况下的优化

            //外面申明一个标识 来表示 该轮是否进行了交换

            bool isSort = false;

            for (int j = 0; j < arr.Length; j++)

            {

                //每一轮开始时 默认没有进行过交换

                isSort = false;

                for (int i = 0; i < arr.Length - 1; i++)

                {

                    if (arr[i] > arr[i + 1])

                    {

                        isSort = true;

                        int x = 0;

                        x = arr[i];

                        arr[i] = arr[i + 1];

                        arr[i + 1] = x;

                    }

                }

                //当一轮结束过后 如果isSort 这个标识 还是false

                //那就意味着 已经是最终的序列了 不需要再判断交换了

                if (!isSort)

                {

                    break;

                }

            }

            for (int i = 0; i < arr.Length; i++)

            {

                Console.Write(" " + arr[i]);

            }

            #endregion

        }

    }

}

猜你喜欢

转载自blog.csdn.net/weixin_61541885/article/details/128745079
今日推荐