排序算法之冒泡算法

public class TestSort{
/**

* 冒泡算法1
* 实现大的数字往后冒
* @param a
* @return
*/
public  int[] bubbleSort_1(int a[]){
int temp;
for (int i=0;i<a.length;i++){
for(int j=1;j<a.length-i;j++){
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
return a;
}
/**
* 冒泡算法2
* 实现小的数字往前冒
* @param a
* @return
*/
public  int[] bubbleSort_2(int a[]){
int temp;
for (int i=0;i<a.length;i++){
for(int j=a.length-1;j>i;j--){
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
return a;
}

public static void main(String[] args) {
int a[]={3,6,24,12,17,45,43,25,1,7,9};
TestSort sort=new TestSort();
int b[]=sort.bubbleSort_2(a);
for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}
}

}


冒泡算法的实现比较简单,其时间的复杂度为O(n^2).

教科书上写着冒泡算法在数列原本就是正序的时候性能最好,最好的时间为O(n).

这其实是给人造成误解的。

因为以上的冒泡算法的实现无论是在数列顺序怎样的情况下时间复杂度都为O(n^2),当数列为正序的情况下只是元素交换的三个步骤省去了,当然性能得到了提升,但是其比较的次数并没有得到减少,因此时间复杂度并没有变化。

而书上提到的O(n)的情况是经过以上的冒泡算法改进的。

其源代码如下:

public void bubbleSort(int arr[]) {
   boolean didSwap;
   for(int i = 0, len = arr.length; i < len - 1; i++) {
       didSwap = false;
       for(int j = 0; j < len - i - 1; j++) {
           if(arr[j + 1] < arr[j]) {
               swap(arr, j, j + 1);
               didSwap = true;
           }
       }
       if(didSwap == false)
           return;
   }    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值