冒泡和下沉算法同时应用可以解决冒泡排序的均衡性缺失的问题

均衡性:只要数据结构相似的,处理时的代价应该也相似。冒泡排序缺乏均衡性,冒泡排序和下沉排序能够很好的解决冒泡算法
的“均衡性缺失”。比如数据结构相似的俩数组:(1)1 2 3 4 5 6 0和(2)6 0 1 2 3 4 5 ,用冒泡排序,前者要进行六次循环,
而后者只需进行一次循环即可。对于下沉算法的,前者仅需要进行一次循环,而后者需要进行六次循环。于是把下沉可冒泡排序结
合起来的话,无论哪个数组,都仅需一次循环即可完成排序,解决了冒泡排序的“均衡性缺失”。而且可以将结果出来的时间压缩一半。

示例程序如下:
public class ArraySorter425
{
 static void bubblesort(int array[])
 { //冒泡排序算法
  for(int i=0;i<(array.length-1)/2;i++)
  {
   for(int j=0;j<array.length-i-1;j++)
   {
    if(array[j]>array[j+1])
    {
     int temp=array[j];
     array[j]=array[j+1];
     array[j+1]=temp;
    }
   }
  //下沉排序算法
   for(int k=array.length-2;k>=i;k--)
   {
    if(array[k+1]<array[k])
    {
     int temp=array[k];
     array[k]=array[k+1];
     array[k+1]=temp;
    }
   }

   print(i+1,array);
  }  
 }

 public static void print(int time,int array[])
 {
  System.out.print("第"+time+"次比较结果是:");
  for(int i=0;i<array.length;i++)
  System.out.print(array[i]+" ");
  System.out.println();
 }


 public static void main(String[] args)
 {
  int array[]={15,5,1,4,8,7,9,10,2,11,23,14};
  bubblesort(array);

 }
}

只用冒泡排序输出(外循环次数应再设为“array.length-1”):

E:/xuexi/java/swq>javac ArraySorter425.java

E:/xuexi/java/swq>java ArraySorter425
第1次比较结果是:5 1 4 8 7 9 10 2 11 15 14 23
第2次比较结果是:1 4 5 7 8 9 2 10 11 14 15 23
第3次比较结果是:1 4 5 7 8 2 9 10 11 14 15 23
第4次比较结果是:1 4 5 7 2 8 9 10 11 14 15 23
第5次比较结果是:1 4 5 2 7 8 9 10 11 14 15 23
第6次比较结果是:1 4 2 5 7 8 9 10 11 14 15 23
第7次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23
第8次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23
第9次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23
第10次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23
第11次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23

E:/xuexi/java/swq>

同时用冒泡和下沉算法的输出结果如下:

E:/xuexi/java/swq>java ArraySorter425
第1次比较结果是:1 5 2 4 8 7 9 10 11 14 15 23
第2次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23
第3次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23
第4次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23
第5次比较结果是:1 2 4 5 7 8 9 10 11 14 15 23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值