顾名思义,冒泡排序就是将要排序的对象像冒泡泡一样一个挨着一个比较,最终形成一定的顺序。
就像一群人中一共有五个人,要让他们按照身高进行排序,首先让第一个人和第二个人比较,个子高的人再和第三个人比较,这两个人中个子更高的再和第四个人比较,一轮下来就会选出最高的人,然后让剩下的四个人按照同样的方法进行比较,在四轮比较之后就会排出他们的顺序。
假设要为一个数组进行排序,实现起来就是这样:
int[] a = {23,12,32,42,15};
首先,23和12进行比较,大的在前,小的在后,需要互换位置,换完之后23在第二位,同第三位的32比较,这时不需要互换位置,同理,32和42也不需要互换位置,到了42和15的时候,又是大的在前,小的在后,这时就需要将42和15互换位置,一趟结束后比较了四次,就将最大的数42换到了数组的最后,第二趟开始时只需要比较前四个数就可以了,以此类推,四趟过后数组就排序完成了。
package pp.suanfa;
/**
* 冒泡排序
*
* @author Administrator
*
*/
public class BubbleSort {
public static void bSort(int[] a)
{
int temp;
for(int i=0;i<a.length;i++)
{
for(int j=1;j<a.length-i;j++)//确定每趟排序要比较元素的个数
{
if(a[j-1]>a[j])//如果前面的大于后面的,就将元素的位置互换
{
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
}
public static void main(String[] args){
int[] a = {32,21,24,65,16};
bSort(a);
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println();
}
}
如果运气好则不需要进入第二轮循环,时间复杂度为O(n),反之时间复杂度为O(n²).