一.思想:
它重复走访数列,走访n-1遍,每次比较相邻的两个元素,如果第一个元素大于(小于)后一个元素,则交换(取决于你约定是升序还是降序),这样就可以把最大(最小)的数沉到最后面。
二.例子:
比如5,3,2,4.第一趟比较过程为:
1.比较5和3,5>3,则交换,交换后的序列为3,5,2,4.
2.比较5,2,5>2,则交换,交换后的序列为3,2,5,4.
3.比较5,4,5>2,则交换,交换后的序列为3,2,4,5.
这样就可以把最大的数5沉到最后面,第二趟,第三趟依次把4,3沉到倒数第二和倒数第三的位置。
三.实现代码:
public class BubbleSort {
public static void main(String args[])
{
int num[] = {4,3,6,9887,5,3,2,3,1};
System.out.print("原始数据:");
print(num);
sort(num);
System.out.print("排序后数据:");
print(num);
}
public static void sort(int num[])
{
int i,j; //循环变量
int flag; //交换变量
for(i = 0; i < num.length - 1 ; ++i)
{
for(j = 0; j < num.length - 1 - i; ++j)
if(num[j] > num[j + 1])
{
flag = num[j];
num[j] = num[j + 1];
num[j + 1] = flag;
}
}
}
public static void print(int num[])
{
int i;
for(i = 0; i < num.length; ++i)
{
System.out.print(num[i]+" ");
}
System.out.print("\n");
}
}
四.复杂度和应用:
时间复杂度为:O(n*n), 空间复杂度为O(1).是稳定的排序算法。
应用:冒泡排序主要用于教学,可在问题规模较小的时候使用,简单易懂。
五.参考资料:
1.追竹的博客:http://blog.youkuaiyun.com/apei830/article/details/6584770
2.百度百科-冒泡排序:http://baike.baidu.com/view/254413.htm?fromId=1313793&fr=wordsearch