浅析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();
    }
}
}

运行结果:

相关文章

  • Springboot应用中过滤器如何修改response的header和body内容

    Springboot应用中过滤器如何修改response的header和body内容

    这篇文章主要介绍了Springboot应用中过滤器如何修改response的header和body内容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 详解path和classpath的区别

    详解path和classpath的区别

    这篇文章主要介绍了详解path和classpath的区别的相关资料,需要的朋友可以参考下
    2017-06-06
  • Java中不得不知的Collection接口与Iterator迭代器

    Java中不得不知的Collection接口与Iterator迭代器

    这篇文章主要介绍了Java中的Collection接口与Iterator迭代器,文中有详细的代码示例供大家参考,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • 基于java中的null类型---有关null的9件事

    基于java中的null类型---有关null的9件事

    这篇文章主要介绍了java中的null类型---有关null的9件事,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java发送http的get、post请求实现代码

    java发送http的get、post请求实现代码

    下面小编就为大家带来一篇java发送http的get、post请求实现代码。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 深入理解springMVC中的Model和Session属性

    深入理解springMVC中的Model和Session属性

    这篇文章主要介绍了深入理解springMVC中的Model和Session属性,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 8种常见的接口请求重试方法总结

    8种常见的接口请求重试方法总结

    在跨境业务中,可能第三方的服务器分布在世界的各个角落,所以请求三方接口的时候,难免会遇到一些网络问题,这时候需要加入重试机制了,下面小编就给大家分享几个接口重试的写法吧
    2023-11-11
  • java实现文件压缩成zip的工具类

    java实现文件压缩成zip的工具类

    这篇文章主要为大家详细介绍了java实现文件压缩成zip的工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Mybatis的入门示例代码

    Mybatis的入门示例代码

    首先新建一个JavaWeb项目并导入mybatis依赖的jar包,同时Mybatis是对数据库的操作所以我们需要在数据库中新建一个表user用来演示。下面通过本文给大家详细介绍Mybatis的入门示例代码,感兴趣的朋友一起看看吧
    2016-11-11
  • JAVA返回PDF文件流并进行下载的实现方法

    JAVA返回PDF文件流并进行下载的实现方法

    这篇文章主要给大家介绍了关于JAVA返回PDF文件流并进行下载的实现方法,PDF文件流下载是通过HTTP协议将服务器上的PDF文件以流的方式发送给客户端,供客户端保存到本地磁盘或直接在浏览器中打开,需要的朋友可以参考下
    2024-02-02

最新评论