基本思想:
临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,
这样一趟过去后,最大或最小的数字被交换到了最后一位,
然后再从头开始进行两两比较交换,直到倒数第二位时结束,因此冒泡排序需要n-1趟复杂度:
当最好的情况,也就是要排序的序列本身就是有序的,需要进行(n-1)次比较,没有数据交换,时间复杂度为O(n).
当最坏的情况,即待排序的表是逆序的情况,此时需要比较次数为:1+2+3+…+(n-1)=n(n-1)/2 次,并作等数量级的记录移动,因此总的时间复杂度为
代码实现:
public static void maoPaoSort(int[] array)
{
for(int i = 0 ;i < array.length-1;i++)
{
for(int j =0;j<array.length-1-i;j++)
{
if(array[j] > array[j+1])
{
swap(array, i, j);
}
}
}
}