冒泡排序的优化

上一篇 / 下一篇  2016-04-12 10:29:07 / 个人分类:算法

packagesort;


importjava.util.Arrays;

//简单冒泡排序

//冒泡排序重复地走过要排序的数列,一次比较两个元素,若顺序错误就把他们交换,直到没有需要交换

publicclassBubbleSort1 {

//比较相邻的元素,若第一个比第二个大,就交换,对每一对相邻元素做同样工作,从开始第一对到结尾最后一对。

//针对所有的元素重复以上的步骤,除了最后一个,持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

/*public static  void bubble(int[]nums){

inttemp;

intsize = nums.length;

for(inti=0;i<size-1;i++){

for(intj=i+1;j<size;j++){

if(nums[i]>nums[j]){

temp=nums[i];

nums[i] =nums[j];

nums[j] =temp;

}

}

}

}*/                   //严格上说这段代码不是标准的冒泡排序,因为它不满足“两两比较”,应该是最简单的交换排序,效率非常低

/*public static void bubble(int[]nums){

inttemp;

intsize = nums.length;

for(inti=0;i<size;i++){

for(intj=size-1;j>i;j--){

if(nums[j-1]>nums[j]){

temp=nums[j-1];

nums[j-1] =nums[j];

nums[j] =temp;

}

}

}

}*/                 //这样的冒泡排序还可以优化,如果待排序的序列是{2,1,3,4,5,6,7,8,9},第一和第二的关键字交换后就没必要再交换了。

publicstaticvoidbubble(int[]nums){

inttemp;

intsize=nums.length;

intflag= 1;

for(inti=0;i<size&&flag==1;i++){

flag= 0;

for(intj=size-1;j>i;j--){

if(nums[j-1]>nums[j]){

temp=nums[j];

nums[j] =nums[j-1];

nums[j-1] =temp;

flag= 1;

}

}

}

}               //对于{2,1,3,4,5,6,7,8,9},当i=2时已经对9和8,8和7..做了比较,没有交换的数据,说明序列已有序,不需要增加循环,可以增加一个标记变量flag实现改进

publicstaticvoidmain(String[]args) {

//TODOAuto-generated method stub

int[]nums={7,6,4,9,5,2,0,1,3,8};

bubble(nums);

System.out.println(Arrays.toString(nums));

}


}


TAG:

 

评分:0

我来说两句

日历

« 2024-05-01  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 33219
  • 日志数: 12
  • 建立时间: 2016-04-06
  • 更新时间: 2016-11-08

RSS订阅

Open Toolbar