已知一个数组78、75、91、36、72、94、43、64、93、46,使用冒泡排序将此数组有序。

冒泡排序是一个运行时间为O(N²)的排序算法。

算法思想:(已从小到大为例)

78、75、91、36、72、94、43、64、93、46      数组元素

0、 1、   2、  3、  4、  5、  6、  7、  8、  9        数组下标

首先进行第一轮排序。数组长度为array.length。

将index[0]与index[1]有序。若ndex[0]>index[1] 则交换数组元素,否则不操作。

其次将index[1]与index[2]有序,ndex[1]>index[2] 则交换数组元素,否则不操作。

再其次将index[2]与index[3]有序,ndex[2]>index[3] 则交换数组元素,否则不操作。

。。。。

直到第一轮排序将数组中最大的元素排序到  数组的最右侧。则第一轮排序结束。

开始第二轮排序,因为数组最后一个元素已经有序,故数组长度为array.length-1。(第二轮排序将最后一个元素排除在外)。

。。。。

开始第三轮排序,因为数组最后两个元素已经有序,故数组长度为array.length-2。(第二轮排序将最后两个元素排除在外)。

。。。。

第四轮,第五轮。直到全部有序。

已下采用java实现:

public class MaoPaoOrder {

private int[] Array;

private int currentIndex;

private int maxIndex;

public MaoPaoOrder(int size) {
          this.Array = new int[size];
          this.currentIndex = 0;
          this.maxIndex = size-1;
}

public void insert(int value) {
          if(this.maxIndex<this.currentIndex) {
                 System.out.println("数组已满");
          }else {
                 this.Array[this.currentIndex++] = value;
          }
}

public void order() {
           int out = this.Array.length-1;
           for(int i=out;i>0;i--) {                          //两层循环,外层循环控制 ‘数组的长度’,内层循环进行比较交换。冒泡排序是将有序元素集中到数组的最右侧。
               for(int j=0;j<out;j++) {                    //控制数组长度为要点,其余进行比较交换即可。
                 onchange(j,j+1);
               }
           }
}

private void onchange(int pre,int next) {
           if(this.Array[pre]>this.Array[next]) {
                  int temp = this.Array[next];
                  this.Array[next] = this.Array[pre];
                  this.Array[pre] = temp;
            }
}

public void show() {
             for (int i : Array) {
                 System.out.println(i);
             }
}
}

最终结果:36、43、46、64、72、75、78、91、93、94

冒泡排序由于进行了大量的比较复制操作,所以其运行时间为O(N²),属于效率比较低的一种排序算法。

冒泡排序 思想 JAVA实现的更多相关文章

  1. 冒泡排序之Java实现

    冒泡排序之Java实现 一.方法一 package cn.com.zfc.lesson21.sort; import java.util.Arrays; /** * * @title BubbleSo ...

  2. 基本算法思想Java实现的详细代码

    基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...

  3. 33.JAVA编程思想——JAVA IO File类

    33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的 ...

  4. 插入排序 思想 JAVA实现

    已知一个数组 60.28.41.39.6 .18 .14.28.49.31 利用插入排序算法进行排序 插入排序是一个运行时间为O(N²)的排序算法. 算法思想  60.28.41.39.6 .18 . ...

  5. 冒泡排序优化JAVA

    本文对传统的冒泡排序进行了一些优化,减少了循环次数. 时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数 C 和记录移动次数 M 均达到最小值: C(min)=n-1 , ...

  6. Java基础(45):冒泡排序的Java封装(完整可运行)

    1.冒泡排序 package lsg.ap.bubble; import java.util.*; public class BubbleSort { public static void bubbl ...

  7. 冒泡排序法-java案例详解

    /** * 功能:冒泡排序法 * 思想:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码, * ,若发现逆序这交换,使得排序码较小的元素逐渐从后部移向前部(从下标较大的单元移 ...

  8. 冒泡排序实现(Java)

    冒泡排序是一种交换排序,它的基本思路是: 两两比较相邻记录的关键字,如果反序则交换,知道没有反序的记录位置. 依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数, ...

  9. 关于冒泡排序的Java代码实现

    一.排序算法的历史: 排序算法的发展历史几乎和计算机的发展历史一样悠久,而且直到今天,世界范围内依然有计算机科学家正在研究着排序的算法,由此可见排序算法的强大魅力.   我们现在介绍的排序算法都是前任 ...

随机推荐

  1. [原创]JMeter初次使用总结

    引言 最近开发 java 后端项目,对外提供Restful API接口,完整功能开发现已完成. 目前通过单测(68%行覆盖率)已保证业务逻辑正确性,同时也尝试使用JMeter进行压力测试以保证并发性能 ...

  2. springboot整合图像数据库Neo4j

    百度百科: Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从 ...

  3. LCD&nbsp;调试总结

    转自:http://blog.csdn.net/qikaibinglan/article/details/5630246 (1) 液晶显示模式 并行:MCU接口.RGB接口.Vysnc接口 串行:SP ...

  4. Sprint + mybatis 编写测试

    今天使用Spring 和mybatis框架编写项目,写了个测试方法方便测试,之前因为一直报空指针,注入不了,所以简单记录一下,方便以后使用 root.xml <?xml version=&quo ...

  5. Java AOP 注解配置与xml配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. 23.NULL 函数

    SQL ISNULL().NVL().IFNULL() 和 COALESCE() 函数 请看下面的 "Products" 表: P_Id ProductName UnitPrice ...

  7. logistic growth model . 求解方法 (高斯牛顿法)

    https://www.stat.tamu.edu/~jnewton/604/chap4.pdf http://www.metla.fi/silvafennica/full/sf33/sf334327 ...

  8. Luogu 4159 [SCOI2009]迷路

    BZOJ 1297 应当是简单题. 发现边权的数量很小,所以我们暴力把一个点拆成$9$个点,然后把$(x, i)$到$(x, i + 1)$连边,代表转移一次之后可以走回来:对于每一条存在的边$(i, ...

  9. Flask框架 之 wtforms

    简介 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 作用 生成HTML标签 form表单验证 使用 - 用户登录示例- 用户注册示例- 数据库获取数据实时更新 ...

  10. Oracle数据库管理

    一.Oracle 的(资源限制)概要文件 为了控制系统资源的使用, 可以利用资源限制概要文件. 资源限制概要文件是 Oracle 安全策略的重要组成部分, 利用资源限制概要文件可以对数据库用户进行基本 ...