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

运行结果:

相关文章

  • 使用@Validated和@Valid 解决list校验的问题

    使用@Validated和@Valid 解决list校验的问题

    这篇文章主要介绍了使用@Validated和@Valid 解决list校验的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • IDEA 如何控制编辑左侧的功能图标ICON(操作步骤)

    IDEA 如何控制编辑左侧的功能图标ICON(操作步骤)

    很多朋友被idea左侧的图标不见了这一问题搞的焦头烂额,不知道该怎么操作,今天小编就交大家如何控制编辑左侧的功能图标 ICON,文字内容不多,主要通过两张截图给大家说明,感兴趣的朋友一起看看吧
    2021-05-05
  • Springboot Redis设置key前缀的方法步骤

    Springboot Redis设置key前缀的方法步骤

    这篇文章主要介绍了Springboot Redis设置key前缀的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • SpringBoot静态资源及原理解析

    SpringBoot静态资源及原理解析

    这篇文章主要介绍了SpringBoot静态资源及原理解析,当创建一个jar工程时,想引入css等静态资源时,需要遵守SpringBoot的静态资源映射关系,通过WebMvcAutoConfiguration查看静态配置资源的规则,需要的朋友可以参考下
    2023-12-12
  • Spring手动获取bean的四种方式

    Spring手动获取bean的四种方式

    本文主要介绍了Spring手动获取bean的四种方式,包括BeanFactoryPostProcessor接口,ApplicationContextAware接口,注解 @PostConstruct 初始化时获取,启动类ApplicationContext获取这四种方法,感兴趣的可以了解一下
    2024-01-01
  • Java枚举类与注解,新手一篇搞定它

    Java枚举类与注解,新手一篇搞定它

    枚举类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。由于Java 不支持多继承,所以枚举对象不能再继承其他类(可以实现接口)
    2021-06-06
  • java 生成有序账号的实现方法

    java 生成有序账号的实现方法

    下面小编就为大家带来一篇java 生成有序账号的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java ArrayList add(int index, E element)和set(int index, E element)两个方法的说明

    Java ArrayList add(int index, E element)和set(int index, E el

    今天小编就为大家分享一篇关于Java ArrayList add(int index, E element)和set(int index, E element)两个方法的说明,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Mybatis plus 配置多数据源的实现示例

    Mybatis plus 配置多数据源的实现示例

    这篇文章主要介绍了Mybatis plus 配置多数据源的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java Springboot如何基于图片生成下载链接

    Java Springboot如何基于图片生成下载链接

    这篇文章主要介绍了Java Springboot如何基于图片生成下载链接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论