排序算法之冒泡排序Java实现
排序算法之冒泡排序
舞蹈演示排序:
冒泡排序: http://t.cn/hrf58M
希尔排序:http://t.cn/hrosvb
选择排序:http://t.cn/hros6e
插入排序:http://t.cn/hros0W
快速排序:http://t.cn/ScTA1d
归并排序:http://t.cn/Sc1cGZ
1、起泡排序是快速排序的基础,但是排序速度较慢。
2、基本思想:将序列中第 1 个元素与第 2 个元素进行比较,如前者大于后者,则两个元素交换位置,否则不交换;
再将第 2 个元素与第 3 个元素进行比较,如前者大于后者,则两个元素交换位置,否则不交换;
依此类推,直到第 n-1 个元素与第 n 个元素进行比较,如前者大于后者,则两个元素交换位置,否则不交换;
经过如此一趟排序,使得 n 个元素的最大值被安置在第 n 个位置上;
此后,再对前 n-1 个元素进行同样的过程,使得该 n-1 个元素的最大值被安置在第 n-1 个位置上;
然后再对前 n-2 个元素重复以上的过程... 直到某一趟排序过程中不出现元素交换位置的动作,排序结束。
3、过程实例
原始数组为:
--------------------------------------
[86, 2, 27, 65, 62, 71, 28, 38, 69, 56]
第 1趟
[2, 27, 65, 62, 71, 28, 38, 69, 56, 86]
第 2趟
[2, 27, 62, 65, 28, 38, 69, 56, 71, 86]
第 3趟
[2, 27, 62, 28, 38, 65, 56, 69, 71, 86]
第 4趟
[2, 27, 28, 38, 62, 56, 65, 69, 71, 86]
第 5趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 6趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 7趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 8趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 9趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
第 10趟
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
--------------------------------------
排序后的数组为:
[2, 27, 28, 38, 56, 62, 65, 69, 71, 86]
一、初级的冒泡排序
import java.util.Arrays; /**
*
* @title BubbleSort
* @describe 冒泡排序
* @author 张富昌
* @date 2016年10月1日下午3:56:30
*/
public class BubbleSortLow { public static void main(String[] args) {
// 声明整型数组
int[] array = new int[10];
// 使用循环和随机数初始化数组
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println("原始数组为:");
System.out.println("--------------------------------------");
System.out.println(Arrays.toString(array));
array = bubbleSort(array);
System.out.println("--------------------------------------");
System.out.println("排序后的数组为:");
System.out.println(Arrays.toString(array));
} /**
*
* 功能:冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,
* 以此类推。
*
*
* 参数:int[] array
*
* 返回类型:int[]
*/
private static int[] bubbleSort(int[] array) {
// 使用临时数组,替代原始数组
int[] arr = array;
for (int i = 0; i < arr.length; i++) {
System.out.println("第 " + (i + 1) + "趟");
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
// 打印每一趟的数组
System.out.println(Arrays.toString(arr));
}
return arr;
} }
二、改良版的冒泡排序
import java.util.Arrays; /**
*
* @title BubbleSort
* @describe 冒泡排序
* @author 张富昌
* @date 2016年10月1日下午3:56:30
*/
public class BubbleSortHigh { public static void main(String[] args) {
// 声明整型数组
int[] array = new int[10];
// 使用循环和随机数初始化数组
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println("原始数组为:");
System.out.println(Arrays.toString(array));
System.out.println("--------------------------------------"); array = bubbleSort(array);
System.out.println("--------------------------------------");
System.out.println("排序后的数组为:");
System.out.println(Arrays.toString(array));
} /**
*
* 功能:冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,
* 以此类推。
*
*
* 参数:int[] array
*
* 返回类型:int[]
*/
private static int[] bubbleSort(int[] array) {
// 使用临时数组,替代原始数组
int[] arr = array;
for (int i = 0; i < arr.length; i++) {
System.out.println("第 " + (i + 1) + "趟");
// 交换的标志,初始值为 false
boolean swap = false; for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 如果交换了,交换标志置为 true
swap = true;
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println(Arrays.toString(arr));
// 如果交换标志为 false,即没有交换,则跳出最近的循环
if (!swap) {
break;
}
}
return arr;
} }
排序算法之冒泡排序Java实现的更多相关文章
- Java常见排序算法之冒泡排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- java排序算法之冒泡排序(Bubble Sort)
java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...
- 排序算法总结(基于Java实现)
前言 下面会讲到一些简单的排序算法(均基于java实现),并给出实现和效率分析. 使用的基类如下: 注意:抽象函数应为public的,我就不改代码了 public abstract class Sor ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- 八大排序算法总结与java实现(转)
八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...
- 第二章:排序算法 及其他 Java代码实现
目录 第二章:排序算法 及其他 Java代码实现 插入排序 归并排序 选择排序算法 冒泡排序 查找算法 习题 2.3.7 第二章:排序算法 及其他 Java代码实现 --算法导论(Introducti ...
- [ 转载 ] js十大排序算法:冒泡排序
js十大排序算法:冒泡排序 http://www.cnblogs.com/beli/p/6297741.html
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
- 排序算法之冒泡排序的思想以及Java实现
1 基本思想 设排序表长为n,从后向前或者从前向后两两比较相邻元素的值,如果两者的相对次序不对(A[i-1] > A[i]),则交换它们,其结果是将最小的元素交换到待排序序列的第一个位置,我们称 ...
随机推荐
- Python练习-一个简单的生成器
今天我们学习了生成器,怎么理解生成器呢,其实就是使用函数的方式自己建立一个迭代器 # 编辑者:闫龙 #做一个简单的生成器 def EasyGene(*args): #建立一个生成器方法并传递多个参数 ...
- php Only variables should be passed by reference 报错问题
这个错误是变量引用引起的非致命错误,可修改php.ini文件的error_reporting = E_ALL & E_NOTICE 使其屏蔽此错误
- python collection 中的队列
认识中的队列 在以前的认知里,队列是先进先出,就是一头进,一头出,Queue.而无意间看到了deque 双向队列. 即从该队列的头或者尾部都能插入和移除元素.而起时间复杂度竟然是一样的!O(1),是不 ...
- 采用dlopen、dlsym、dlclose加载动态链接库【总结】【转】
转自:https://www.cnblogs.com/Anker/p/3746802.html 1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将 ...
- HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6215 题意:给你长度为n的数组,定义已经排列过的串为:相邻两项a[i],a[i+1],满足a[i]&l ...
- 使用MongoDB命令工具导出、导入数据
Windows 10家庭中文版,MongoDB 3.6.3, 前言 在前面的测试中,已经往MongoDB的数据库中写入了一些数据.现在要重新测试程序,数据库中的旧数据需要被清理掉,可是,又想保存之前写 ...
- gbdt和xgboost api
class xgboost.XGBRegressor(max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, objective= ...
- 用js面向对象思想封装插件
js是基于原型的面向对象语言,如果你学过java,c#等正统面向对象语言,你会难以理解js的面向对象,他和普通的面向对象不太一样,今天,我们通过封装一个toast插件,来看看js面向对象是如何运行的. ...
- (转)链接服务器——获取EXCEL数据
测试目的:验证利用链接服务器.分布式查询获取EXCEL中的数据测试环境:Microsoft SQL Server 2005 - 9.00.3080.00 (X64) Enterprise Editi ...
- oralce 笔记
查某一表的行数 select max(rownum) from tablename 插入数据之前判断是否重复 insert into tablename (coloum1,coloum2) selec ...