C# 冒泡排序(拓展)

2020-12-14 16:38发布

冒泡排序拓展: 
使用冒泡排序不仅仅可以进行单一数值的排序,,还可以用于其他排序,,,当然核心逻辑没什么变化还是逐一比较,,,

下面以雇员进行举例: 
以员工的薪资进行排序,然后按照薪资大小进行排序输出员工信息,,,

using System;


namespace 冒泡排序拓展

{

    class Program

    {

        static void Main(string[] args)

        {

            int[] sortArr = { 12, 14, 5, 45, 6, 2, 2 };

            Sort(sortArr);

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

            {

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

            }


            Console.WriteLine();



            Console.WriteLine("===========使用通用的排序方法=============");


            /*使用此方法,需要自己创建对应类的排序方法,

             * 并且此方法返回值为bool类型,带有需要比较的数作为参数

             * 还需要重写ToSting方法,将其返回值更改成想要的

             */


            //创建雇员类实例,并将其进行薪资排序

            Employee[] empArr = { new Employee("chen", 123),

                                  new Employee("zhen", 789),

                                  new Employee("czy", 648),

                                  new Employee("yaya", 12),

                                  new Employee("Czhenya", 546)};

            //调用通用冒泡排序方法,注意参数

            CommonSort<Employee>(empArr,Employee.Compare);


            foreach (Employee item in empArr)

            {

                Console.WriteLine(item); //自动调用ToString方法

            }


            Console.ReadKey();

        }


        /// <summary>

        /// 经典冒泡排序

        /// </summary>

        static void Sort(int[] sortArray)

        {

            bool swapped = true;

            do

            {

                swapped = false;

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

                {

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

                    {

                        int temp = sortArray[i];

                        sortArray[i] = sortArray[i + 1];

                        sortArray[i + 1] = temp;

                        swapped = true;

                    }

                }

            } while (swapped);

        }


        /// <summary>

        /// 冒泡排序

        /// </summary>

        /// <param name="sortArray">排序数组</param>

        static void MaoPaoSort(int[] sortArray)

        {

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

            {

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

                {

                    if (sortArray[j] > sortArray[j + 1])

                    {

                        int temp = sortArray[j];

                        sortArray[j] = sortArray[j + 1];

                        sortArray[j + 1] = temp;

                    }

                }

            }

        }


        /// <summary>

        /// 通用的冒泡排序

        /// </summary>

        /// <typeparam name="T">泛型</typeparam>

        /// <param name="sortArray">要排序的数组</param>

        /// <param name="compareMethod">func的委托 传入自定义的比较方法</param>

        static void CommonSort<T>(T[] sortArray,Func<T,T,bool> compareMethod)

        {

            bool swapped = true;

            do

            {

                swapped = false;

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

                {

                    if (compareMethod(sortArray[i],sortArray[i + 1]))

                    {

                        T temp = sortArray[i];

                        sortArray[i] = sortArray[i + 1];

                        sortArray[i + 1] = temp;

                        swapped = true;

                    }

                }

            } while (swapped);

        }


    }

}



namespace 冒泡排序拓展

{

    /// <summary>

    /// 雇员类

    /// </summary>

    class Employee

    {

        public`这里写代码片` string Name { get; private set; }

        public int Salary { get; private set; }


        public Employee(string name,int salary)

        {

            this.Name = name;

            this.Salary = salary;

        }


        //自定义比较方法   如果e1>e2  返回true 否则返回false

        public static bool Compare(Employee e1,Employee e2)

        {

            if (e1.Salary>e2.Salary)

            {

                return true;

            }

            return false;

        }


        //重写Objective类中的ToSting方法,

        public override string ToString()

        {

            //删除(注释)默认调用父类的方法

            //return base.ToString();

            //更改为自己要的输出

            return Name +" "+ Salary;

        }

    }

}




作者:Czhenya

链接:https://czhenya.blog.csdn.net/article/details/78203244

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。