C#的冒泡排序?

2020-05-26 14:58发布

6条回答

冒泡排序最多通过N-1次排序将数组变为有序,如果是升序排序的话,那么第i次排序会将第i大的元素放到倒数第i个正确的位置,直到本次排序没有任何元素交换则已排好序,这里面要注意进行优化及时退出循环:

        static void BubbleSort(T[] _Array) where T: IComparable

        {

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

            {

                bool swap = false;

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

                {

                    if(_Array[j].CompareTo(_Array[j + 1]) > 0)

                    {

                        T tmp = _Array[j];

                        _Array[j] = _Array[j + 1];

                        _Array[j + 1] = tmp;

                        swap = true;

                    }

                }

                if (!swap)

                    break;

            }

        }

        static void Main(string[] args)

        {

            int[] arr = { 100, 50, 76, 20, 81 };

            BubbleSort(arr);

            foreach (var ele in arr)

                Console.Write(ele + ",");

            Console.WriteLine();

            string[] strarr = { "c", "b", "a", "e", "d" };

            BubbleSort(strarr);

            foreach (var ele in strarr)

                Console.Write(ele + ",");

            Console.WriteLine();

        }

运行输出:

image.png

Ross
3楼 · 2020-05-26 17:23

以int类型数组为例,进行升序排序,冒泡排序如下:

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

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])

        {

            int temp = arr[j];

            arr[j]=arr[j+1];    

            arr[j+1]=temp;

        }

    }

}

男孩无衣
4楼 · 2020-05-26 20:29

http://49.232.157.182/changzheng/GIF1.gif

http://49.232.157.182/changzheng/GIF1.gif


做了一个gif图, 不知道怎么上传gif, 这是冒泡排序的过程演示, 可视化.

Transform
5楼 · 2020-05-26 21:43

何为冒泡?就是气泡从水底上升至水面的过程。编程中也是一样的,让数据在数组中进行冒泡。逻辑思想是相邻的两个数据进行对比,从而进行冒泡。二楼的代码楼主可以参考下。

蜗牛
6楼 · 2020-05-27 09:15

其实一楼已经回答完毕,建议楼主要先弄明白如何进行冒泡的,换而言之就是冒泡排序的流程

然后关于代码:其实是有规律可言的:

借用一楼代码:

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

//外层循环控制层数

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

{//内层循环控制每层得出最大值的次数

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

     {//if这里的大于号和小于号,控制的是升序还是降序排序

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

        {

            int temp = arr[j];

            arr[j]=arr[j+1];    

            arr[j+1]=temp;

        }

    }

}


小狮子
7楼 · 2020-07-07 09:24

 

冒泡排序算法(Bubble Sort)是一种流行但低效的排序算法。它的原理是反复比较待排序数组中所有相邻的两个数据,使他们按照升序(或降序)排列。当待排序数组中所有相邻数据都比较过一次之后,待排序数组中最小(或最大)的数据会被逐步交换到第一位,就像气泡从水底慢慢升到水面一样,故名“冒泡排序算法”。

冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,每进行一趟比较,每一趟就少比较一次,一定程度上减少了算法的量

 

   static void BubbleSort

        {

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

            {

                bool swap = false;

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

                {

                    if(_Array[j].CompareTo(_Array[j + 1]) > 0)

                    {

                        T tmp = _Array[j];

                        _Array[j] = _Array[j + 1];

                        _Array[j + 1] = tmp;

                        swap = true;

                    }

                }

                if (!swap)

                    break;

            }

        }

        static void Main(string[] args)

        {

            int[] arr = { 100, 50, 76, 20, 81 };

            BubbleSort(arr);

            foreach (var ele in arr)

                Console.Write(ele + ",");

            Console.WriteLine();

            string[] strarr = { "c", "b", "a", "e", "d" };

            BubbleSort(strarr);

            foreach (var ele in strarr)

                Console.Write(ele + ",");

            Console.WriteLine();

相关问题推荐

没有解决我的问题,去提问