java排序算法(四):冒泡排序
java排序算法(四):冒泡排序
冒泡排序是计算机的一种排序方法,它的时间复杂度是o(n^2),虽然不及堆排序、快速排序o(nlogn,底数为2).但是有两个优点
1、编程复杂度很低。很容易写出代码
2、具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的顺序。而堆排序和快速排序均不具有稳定性
不过一路、二路归并排序和不平衡二叉树排序的速度均比冒泡排序速度快,且具有稳定性,但速度不及堆排序、快速排序。冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至n-i个数。若第i个数比后一个数大(则升序,小则降序)则交换两数。
冒泡排序算法稳定,o(1)额空间,比较和交换的时间复杂度都是o(n^2).自适应,对于已基本排序的算法,时间复杂度是o(n).冒泡排序算法的许多性质和插入算法相似。但对于系统开销稍高一点点。
排序过程
设想被排序的数组R[1..n]垂直树立。将每个元素看做有重量的气泡。根据轻轻炮不能在重气泡下面的原则,从下往上扫描数组R.凡扫描到违反本原则的轻气泡。就使其向上漂浮。如此反复进行。直至最后任何两个气泡都是轻者在上重着在下的原则为止。
代码实现
package com.spring.test; import sun.nio.cs.ext.ISCII91; /**
* 冒泡排序测试
*/
public class bubbleSortTest {
public static void main(String[] args) {
int[] data5 = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7};
print(data5);
bubbleSort(data5);
System.out.println("排序后的数组");
print(data5);
} /**
* 冒泡排序
* @param data
*/
public static void bubbleSort(int[] data){
for(int i = 0;i < data.length-1;i++){
boolean isSorted = false;
for(int j=0;j<data.length-i-1;j++){
if(data[j] > data[j+1]){
swap(data,j,j+1);
isSorted = true;
print(data);
}
}
if(!isSorted){
//若数组已经处于有序状态则结束排序
break;
}
}
} /**
* 对两个数据进行交换
* @param data
* @param i
* @param j
*/
public static void swap(int[] data,int i,int j){
if(i==j){
return ;
}
data[i] = data[i] + data[j];
data[j] = data[i] - data[j];
data[i] = data[i] - data[j];
} /**
* 对数组进行打印输出
* @param data
*/
public static void print(int[] data){
for(int i=0;i<data.length;i++){
System.out.print(data[i]+"\t");
}
System.out.println();
}
}
运行结果

java排序算法(四):冒泡排序的更多相关文章
- java排序算法之冒泡排序(Bubble Sort)
java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...
- java排序算法之冒泡排序和快速排序
总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...
- Java排序算法(四):Shell排序
[基本的想法] 将原本有大量记录数的记录进行分组.切割成若干个子序列,此时每一个子序列待排序的记录个数就比較少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时.再对全体记录进行一次直 ...
- 算法相关——Java排序算法之冒泡排序(二)
0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个" ...
- java排序算法之冒泡排序
冒泡排序的基本思想即将一串数字进行由小到大进行排序 例如1,9,7,2,4,3,6,10,20,5 实现思路: 第一个数分别与接下来的数字做对比 第一次 1<9不变,再1<7不变,1&l ...
- Java常见排序算法之冒泡排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 排序算法之冒泡排序Java实现
排序算法之冒泡排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb 选择排序:http://t.cn/hros6e 插入排序:ht ...
- Java 排序算法-冒泡排序及其优化
Java 排序算法-冒泡排序及其优化 什么是冒泡排序 基本写法 优化后写法 终极版本 源码及测试 什么是冒泡排序 这里引用一下百度百科上的定义: 冒泡排序(Bubble Sort),是一种计算机科学领 ...
- Java排序算法(四)希尔排序2
Java排序算法(四)希尔排序2 希尔排序移步法:分组+直接插入排序组合 一.测试类SortTest import java.util.Arrays; public class SortTest { ...
随机推荐
- Java StringBuilder 和 StringBuffer 源码分析
简介 StringBuilder与StringBuffer是两个常用的操作字符串的类.大家都知道,StringBuilder是线程不安全的,而StringBuffer是线程安全的.前者是JDK1.5加 ...
- 【php】strtr与str_replace的区别
strtr(string,from,to): 逐个字符开始替换,以from跟to中长度较较短的一个为准,例如: strtr("aidenliu","ai",&q ...
- 用vlc搭建简单流媒体服务器(UDP和TCP方式)
.UDP(legacy)传统模式 .RTP方式 .RTSP方式 RTSP方式是通过RTP进行流媒体数据的传输的,VLC的实现也是基于UDP的.这种方式网上的参考资料比较多,我就不截图了,直接叙述命令行 ...
- RHCE6.4 rpm 安装gcc
先将gcc的iso里的Packages拷贝到根目录下,方便以后使用,再找gcc的rpm包安装: 网上说有以下依赖,需要按照一下顺序安装: rpm -ivh cpp*****.rpm rpm -ivh ...
- Nethogs - 网络流量监控工具
命令iftop来检查带宽使用情况.netstat用来查看接口统计报告.还有其他的一些工具Bandwidthd.Speedometer.Nethogs.Darkstat.jnettop.ifstat.i ...
- hdu5863 cjj's string game
矩阵快速幂 #include<bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MOD = ...
- STM32f4 ARM Bootloader
参考资料: 基于ARM 的嵌入式系统Bootloader 启动流程分析 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计) Android系统启动 ...
- 优化一个小时不出结果的SQL
今天刚清闲点,在网上看些资料,这时,用户QQ上发来求助,说一个更新数据的SQL语句很慢,都一个小时了也不出结果,于是,了解下具体的情况,略施小计,5s出结果,下面是我分析该SQL时用到的执行计划,略去 ...
- JavaScript设计模式(7)-设配器模式
适配器模式 1. 作用: 协调两个不同的接口 2. 适用场景 适配器适用于客户期待的接口与现有 API 提供的接口不兼容这种场景.他只能用来协调语法上的差异问题.适配器所适配的两个方法执行的应该是类似 ...
- [APIO2015]八邻旁之桥
题面在这里 sol 这是一个\(Splay\)的题解 首先,如果一个人的家和办公室在同一侧,我们可以直接预处理; 如果不在同一侧,也可以加上1(当然要过桥啦) 当k==1时 我们设桥的位置为\(pos ...