浅析java双向冒泡排序算法

 更新时间:2015年02月02日 10:45:13   投稿:hebedich  
这篇文章主要介绍了浅析java双向冒泡排序算法,并附上源码,需要的朋友可以参考下

以整数升序排序为例来简单说明一下双向冒泡排序的过程:首先从前往后把最大数移到最后,然后反过来从后往前把最小的一个数移动到数组最前面,这一过程就是第一轮,然后重复这一过程,最终就会把整个数组从小到大排列好。双向冒泡排序要稍微优于传统的冒泡排序,因为双向排序时数组的两头都排序好了,我们只需要处理数组的中间部分即可,而单向即传统的冒泡排序只有尾部的元素是排好序的,这时每轮处理都需要从头一直处理到已经排好序元素的前面一个元素。虽然它在效率上有了点改进,但它也不能大幅度提高其排序的效率,这是由冒泡排序的基本过程所决定了的。在此基础上改进了一下,下面的代码可以实现对奇数偶数分别排序

双向冒泡排序源代码:

复制代码 代码如下:

package com.zc.manythread;
import java.util.Random;
/**
 * 双向冒泡排序
 * @author 偶my耶
 *
 */
public class BBSort  {
    //双向冒泡算法,极大的减少了循环排序的次数
    public int[] sort(int[] a)throws Exception{
        int j;
        int limit=a.length;
        int st=-1;
        while(st<limit){
             //必须要给st和limit赋值,否则若数组一开始就有序
            st++;
            limit--;
            boolean swapped=false;
            //第一次循环将最大的值放到末尾
            for (j = st    ; j < limit; j++) {
                 if (a[j]>a[j+1]) {
                    int T=a[j];
                    a[j]=a[j+1];
                    a[j+1]=T;
                    swapped=true;
                }
            }
            if (!swapped) {
                return a;
            }else {
                swapped=false;
                //第二次循环将最小的值放到了开头
                for (j = limit; --j>=st;) {
                    if(a[j]>a[j+1]){
                        int T=a[j];
                        a[j]=a[j+1];
                        a[j+1]=T;
                        swapped=true;
                    }
                }
                if (!swapped) {
                    return a;
                }
            }
        }
        return a;
    }
    private static int[]  createDate(int count) {
        /**
         * 无重复数组
         */
        int[] data=new int[count];
          Random rand = new Random();
          boolean[] bool = new boolean[100];
          int num = 0;
          for (int i = 0; i < count; i++) {
           do {
            // 如果产生的数相同继续循环
            num = rand.nextInt(100);
           } while (bool[num]);
           bool[num] = true;
        /*   list.add(num);*///list 列表
           data[i]=num;
          }
          return data;
    }
public static void main(String[] args) {
    final int count=10;
    int[] data=createDate(count);
    for(int n : data){
           System.out.print(n+"\t");
        }
    System.out.println();
    BSrot bsrot=new BSrot(data);
    try {
    int[] a=bsrot.sort(data);
    for(int n : a){
           System.out.print(n+"\t");
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

运行结果:

相关文章

  • SpringBoot2.x中management.security.enabled=false无效的解决

    SpringBoot2.x中management.security.enabled=false无效的解决

    这篇文章主要介绍了SpringBoot2.x中management.security.enabled=false无效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java如何调用TSC打印机进行打印详解

    Java如何调用TSC打印机进行打印详解

    这篇文章主要给大家介绍了关于Java如何调用TSC打印机进行打印的相关资料,文中介绍了三种方法,分别是两种后台打印以及JS打印 ,三种方法都给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-07-07
  • SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    这篇文章主要介绍了SpringBoot整合mybatis-generator-maven-plugin 1.4.0的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-01-01
  • spring boot+mybatis-plus配置读写分离的操作

    spring boot+mybatis-plus配置读写分离的操作

    这篇文章主要介绍了spring boot+mybatis-plus配置读写分离的操作,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Java tomcat环境变量及idea配置解析

    Java tomcat环境变量及idea配置解析

    这篇文章主要介绍了Java tomcat环境变量及idea配置解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 小议Java的源文件的声明规则以及编程风格

    小议Java的源文件的声明规则以及编程风格

    这篇文章主要介绍了小议Java的源文件的声明规则以及编程风格,仅给Java初学者作一个简单的示范,需要的朋友可以参考下
    2015-09-09
  • 解决SpringBoot打成jar运行后无法读取resources里的文件问题

    解决SpringBoot打成jar运行后无法读取resources里的文件问题

    这篇文章主要介绍了解决SpringBoot打成jar运行后无法读取resources里的文件问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java中的信息摘要算法MessageDigest类用法详解

    Java中的信息摘要算法MessageDigest类用法详解

    这篇文章主要介绍了Java中的信息摘要算法MessageDigest类用法详解,java.security.MessageDigest类为应用程序提供信息摘要算法的功能,如MD5或SHA-1或SHA-256算法,信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值,需要的朋友可以参考下
    2024-01-01
  • java中的FileInputStream三种read()函数用法

    java中的FileInputStream三种read()函数用法

    这篇文章主要介绍了java中的FileInputStream三种read()函数用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • IDEA打包普通web项目操作

    IDEA打包普通web项目操作

    这篇文章主要介绍了IDEA打包普通web项目操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论