文档章节

冒泡排序算法 :BubbleSort

o
 osc_a22drz29
发布于 2019/03/23 22:18
字数 561
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

java中的经典算法:冒泡排序算法

$. 可以理解成当你静止一杯可乐时,里面的CO2随着你的静止,由于不不易溶于水的性质,

    且会以气泡的形式逐渐向上漂浮。越大的气泡上浮速度越快。

冒泡排序算法的原理于此相似。 每次进行相邻值之间的替换;

    大的值(元素)排在小的值(元素)前面  ,或者小的值(元素) 排在大的值(元素)前面。

 

import java.util.Arrays;

/*
* 冒泡排序算法
* */
public class BubbleSort {

    public static void main(String[] args) {

        int[] arr = {1, 35, 64, 24, 7, 6, 8, 46, 3, 34}; //定义10个数
        for (int i = 0; i < arr.length - 1; i++) {  //控制多少次循环
            System.out.println("循环次数:"+i);
            for (int j = 0; j < arr.length - i - 1; j++) {//每进行一次循环排序的次数
                if (arr[j] > arr[j + 1]) {     //替换
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
                System.out.println("排序次数:"+ j);
            }
        }
        for (int num:arr){
            System.out.println(Arrays.asList(num));  //采用集合的方式更直观的看结果
        }

    }
}

外层for控制着循环次数,内层for控制每次循环所需要的排序次数。

共进行8次循环,每次排序的次数以此递减。

 

    第九次因为只有一个元素无需排序,所以直接输出结果。所以只存在8次循环排序。

 

    每循环一次排序当前相邻数大小关系。

if (arr[j] > arr[j + 1]) {     //替换
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }

  使用temp相当于一个中介寄存。

传递方式如下:

在冒泡排序中,相邻大的元素(小的元素)替换小的元素(大的元素)。

下图为第一次排序的一个步骤。 

arr[0] < arr[1]不做变化

arr[1] < arr[2]:不做变化

arr[2] > arr[3]:替换

替换后的当前arr[2] = 24  arr[3] = 64

arr[3] > arr[4] : 替换

替换后的arr[3] = 7  arr[4] = 64

以此类推,大的值(元素)往前调,小的值(元素)往后调。

当循环到最后一次时,只有一个数,所以最后一次不需要循环, 所以 

i < arr.length - 1

 每循环一次一次进行排序时总是去除上次最后一个值,所以

j < arr.length - i - 1

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
排序算法之冒泡排序

举一隅不以三隅反,则不复也 ------孔子 前言 冒泡排序是常用排序算法之一,基于冒泡排序的扫描交换思想在其它程序设计中是一种很常用的设计思想。本篇文章从什么是有序序列说起,进而讲解扫...

osc_vo8kvenl
2018/07/01
0
0
Java排序算法之冒泡排序

java冒泡排序算法 1.基本思想: 对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组的前面(从小到大排序),把大的元素移动到数组的后面,即交换两个元素的位置,这样较小...

osc_5hu7tvpy
2019/10/17
2
0
排序一 冒泡排序

要点 冒泡排序是一种交换排序。 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。 算法思想 它重复地走访过要排序的数...

guitar_zp
2015/03/03
0
0
算法踩坑4-冒泡排序

背景 接上面三篇文章 算法踩坑-快速排序 算法踩坑2-插入排序 算法踩坑3-堆排序 来继续聊聊最近我写的一些算法的小例程,这次要聊的是冒泡排序,是一个时间复杂度O(N²)的算法。冒泡排序是一个...

aron1992
2017/11/07
27
0
冒泡排序及优化方案

冒泡排序,是稳定排序,时间复杂度是O(N2)。 算法稳定性:假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的! 代码实现...

yiyezhou2012
2019/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么从HBase的0.96版本开始,舍弃了-ROOT-文件?

HBase结构的读写流程 (1). HBase0.96版本之前: (2). HBase0.96开始: a. 当客户端获取到.meta文件的位置之后,会缓存.meta.文件的位置 b. 客户端还会缓存HRegion的位置 -ROOT-存在的意义: ...

其乐m
今天
18
0
volatile关键字对 - What is the volatile keyword useful for

问题: At work today, I came across the volatile keyword in Java. 今天的工作中,我遇到了Java中的volatile关键字。 Not being very familiar with it, I found this explanation: 不太熟......

技术盛宴
今天
25
0
golang 封装 mysql 和 redis 连接

Mysql封装 package dbimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx")var DB *sqlx.DBfunc init(){database, err := sqlx.Op......

开源中国最牛的人
今天
21
0
pdfbox 读取文件报错 java.io.IOException: Page tree root must be a dictionary

pdfbox java.io.IOException: Page tree root must be a dictionary 示例代码 public static void main(String[] args) { try (InputStream sampleInputs = new ClassPathResource("s......

lemos
今天
28
0
整理 Linux下列出目录内容的命令

在 Linux 中,有非常多的命令可以让我们用来执行各种各样的任务。当我们想要像使用文件浏览器一样列出一个目录下的内容时,大家第一时间想到的是 ls 命令。但只有 ls 命令能实现这个目的吗?...

良许Linux
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部