基本思想
冒泡排序的思想就是每次比较两个相邻的元素,如果它们的顺序错误就把它们位置交换,直到所有元素位置正确。
算法图例
例如我们需要将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实现.