冒泡排序算法 :BubbleSort
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
冒泡排序算法 :BubbleSort的更多相关文章
- c#-冒泡排序-算法
冒泡排序(Bubble Sort) 冒泡排序算法的运作如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后 ...
- 快速、冒泡排序算法(PHP版)
1.冒泡排序算法改进: 方法一: function bubbleSort($arr){//$arr(1...n)是待排序的文件,采用自下向上扫描,对$arr做冒泡排序 $bFlag = true; / ...
- PHP实现冒泡排序、双向冒泡排序算法
冒泡排序(Bubble Sort),是一种较简单的.稳定的排序算法.冒泡排序算法步骤:比较相邻的元素,如果第一个比第二个大,就交换他们两个的位置:对每对相邻的元素执行同样的操作,这样一趟下来,最后的元 ...
- 【C语言】两种方式实现冒泡排序算法
题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...
- 冒泡排序算法的C++实现
直接上代码: #include <iostream> using namespace std; void BubbleSort(int arr[],int n){ ) //在本例中,第1次 ...
- 用 Java 实现一个冒泡排序算法
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面.即首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前,大数放后,如 ...
- c#冒泡排序算法和快速排序算法
依次比较相邻的两个数,将小数放在前面,大数放在后面. 第1趟: 首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放 ...
- 基于Java实现的冒泡排序算法
冒泡排序是一种简单基础的排序算法,相信在大学课堂里老师已经讲过了,现在我基于Java来实现一遍. 简述 冒泡排序正如其关键词一样,杂乱的气泡经过浮动,最后大的气泡飘到了上面而小的气泡在下面,无序的元素 ...
- 冒泡排序算法和简单选择排序算法的js实现
之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(d ...
随机推荐
- Linux OOM 自动杀死进程
问题描述: 今天上班后,登录一台内网测试服务器,发现部分进程失踪 (Nginx/PHP-FPM/MySQL/Crond). 解决方法: 1.首先启动这些进程,保证正常提供服务. 2.查看服务器日志信息 ...
- shell 中可以for 循环的时间加减日期格式
..};do # LAST_HOUR=`date -d '-${num} hour' +%H` 不可for循环,报格式错误 LAST_HOUR=`date "+%H" -d -${ ...
- DDA算法
[DDA算法] Digital Differential Analyzer,DDA算法是一种线段扫描转换算法.(线段光栅化算法) DDA算法优缺点: 1.消除了直线方程中的乘法计算,而在x.y方向使用 ...
- Professional C# 6 and .NET Core 1.0 - Chapter 42 ASP.NET Web API
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处: -------------------------------------------------------- ...
- 141. Linked List Cycle (List; Two-Pointers)
Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex ...
- Unity代码里的Position和界面上的Position
代码里的Position = 世界坐标 this.gameObject.transform.position 界面上的Position = localPosition
- Ros学习——Cmakelists.txt文件解读
1.过程 .Required CMake Version (cmake_minimum_required) //CMake 需要的版本 .Package Name (project()) //#定义工 ...
- 494. Target Sum 添加标点符号求和
[抄题]: You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have ...
- 线上服务内存OOM问题定位
转自:架构师之路,http://mp.weixin.qq.com/s/iOC1fiKDItn3QY5abWIelg 相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的 ...
- zigbee之IAR环境搭建
注册机第一个要选择: 为什么? 之前说CC2530是支持zigbee协议的无线芯片,其实它是这款硬件上有一个支持zigbee协议的无线电路,不仅有这款电路,而且还有一块cpu电路,它就是8051cpu ...