排序算法——冒泡排序.net实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Leaderxin/article/details/102604972

排序算法——冒泡排序.net实现

基本思想

冒泡排序的思想就是每次比较两个相邻的元素,如果它们的顺序错误就把它们位置交换,直到所有元素位置正确。

算法图例

例如我们需要将12 35 99 18 76 这5 个数进行从大到小的排序。
首先比较第一位和第二位,发现12比35小,那么需要交换位置,交换结果为35 12 99 18 76;
按照刚才的方法再比较第二位和第三位,12比99小需要交换位置,交换结果为35 99 12 18 76;
循环按照以上方法继续比较第三位和四位以及第四位和第五位,最终结果为35 99 18 76 12,经过这一轮四次比较,我们发现最小的数12已经成功就位。
每次都是比较相邻的两个数,如果后面的数比前面的数大,则交换这两个数的位置。一直比较下去直到最后两个数比较完毕后,最小的数就在最后一个了。就如同是一个气泡,一步一步往后“翻滚”,直到最后一位。所以这个排序的方法有一个很好听的名字“冒泡排序”。
在这里插入图片描述
然后我们重复上面的过程进行第二轮比较,依次比较第一位和第二位,第二位和第三位,第三位和第四位,(第四位和第五位不用比较,因为第一轮已经确定第五位为最小值),最终调整结果为
35 99 76 18 12。
同样逻辑进行第三轮比较,最终调整结果为 99 76 35 18 12。
第四轮比较结果为 99 76 35 18 12,即完成整个排序。

编码实现

废物不多说,直接上代码

public class SortHelper
    {
        public static T[] MP_Sort<T>(T[] array) where T : IComparable
        {
            for (int i = 0; i < array.Length - 1; i++)    //外层循环需要n-1次
            {
                for (int j = 0; j < array.Length - 1 - i; j++)
                {
                    if (array[j].CompareTo(array[j + 1]) < 0) //如果array[j]比array[j+1]小,那么需要互换位置
                    {
                        T temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }
            return array;
        }
    }

调用执行结果如下:
在这里插入图片描述

总结分析

冒泡排序的核心部分是双重嵌套循环,优点是算法思路清晰较为简单,只需十行左右代码,适合初学者,缺点也同样明显,时间复杂度为O(N2),效率较低。下一篇将为大家带来更常用且效率更高的快速排序算法。
博客新人~如有问题或错误,还望大家在评论中斧正

下一篇: 排序算法——快速排序.net实现.

猜你喜欢

转载自blog.csdn.net/Leaderxin/article/details/102604972