冒泡排序算法 :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 ...
随机推荐
- android 积累
图片资源 图片资源是简单的Drawable资源,目前Android支持的图片格式有:gif.png.jpg等.我们只需要把图片资源放置到\res\drawable目中,那么在编译后的R.java类中就 ...
- hibernate中 criteria.setProjection(Projections.rowCount()).uniqueResult()为null的Bug
在hibernate中,在查询总数时,会使用如下方法; public Integer getCount(final DetachedCriteria detachedCriteria) { ...
- Scrum由来
历史故事 在越南战争期间(1955年-1975年),对于美国战机飞行员而言,要执行100次飞行任务,飞到敌国领空被击落的概率是50%. 1967年,萨瑟兰还是一个没有经验的年轻飞行员,当时却是做最危险 ...
- ios的xxxAppDelegate.h分析
#import "BIDAppDelegate.h" #import "BIDViewController.h" @implementation BIDAppD ...
- js-textarea文本换行符处理,Java后端以及js前端如何处理
方法一:后台处理 TextArea的换行符处理 TextArea文本转换为Html:写入数据库时使用 js获取了textArea的文本内容之后,器内容含有换行,空格,制表符之类的字符,但是js字符串不 ...
- SpringData JPA整理
一 首先熟悉几种jpa中的接口Repository,CrudRepository,PagingAndSortingRepository,JpaRepository,JpaSpecificationEx ...
- swift新建类和子类方法的重写与重载
1.首先什么是重写与重载? 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法. 重写(覆盖)的规则: ...
- 523. Continuous Subarray Sum是否有连续和是某数的几倍
[抄题]: Given a list of non-negative numbers and a target integer k, write a function to check if the ...
- Linux系统中当前路径不加入PATH的原因
主要是出于安全的考虑,由于系统默认是允许所有人在/tmp下写入任何文件的,万一有居心不良的用户或者黑客入侵到计算机,并在/tmp下面埋下木马,名字为ls,当用户用root身份登录后,到/tmp目录执行 ...
- KVM下raw和qcow2格式磁盘文件IO测试
1. Host OS 环境 CPU: Intel Xeon E5620 2.40GHz MEM: 16GB DISK: 500GB SATA OS: CentOS5.7 64bit 2. Guest ...