java的冒泡_Java实现冒泡排序

Java实现冒泡排序

Java实现冒泡排序

冒泡排序是一种不断交换相邻的元素的排序,一些元素在不断得被交换中,就像水中冒泡一样,因此得名冒泡排序。

1.比较相邻的元素,如果前面元素比后面元素要小,那么则交换这两个元素。

2.对每一组相邻的元素都进行比较,从开始的第一对元素到结尾的最后一对元素依次进行比较,叫做一次冒泡。经过一次冒泡后,能保证最大的元素在最后

3.如果说数组有n个元素,进行1次冒泡后能保证最后1个元素是最大的,也就是说进行1次冒泡能保证排完最后1个元素。那么进行n-1次冒泡后,能保证排完n-1个元素,n-1个元素排序完成,那么整个数组排序完成。因此一共需要冒泡n-1次。

92e5fbae3b0823043b6886a11a03ca9b.png

public class Bubble {

//交换a数组中索引x和索引y处的元素

private static void exch(Comparable[]a,int x,int y){

Comparable temp=a[x];

a[x]=a[y];

a[y]=temp;

}

//判断a元素是否小于b元素

private static boolean less(Comparable a,Comparable b){

return a.compareTo(b)<0;

}

public static void sort(Comparable[]a){

final int N=a.length;

//进行n-1次冒泡

for(int i=N-1;i>0;i--){

for(int j=0;j

if(less(a[j+1],a[j]))exch(a,j,j+1);

}

}

}

public static void main(String[] args) {

Integer[]a=new Integer[50];

for (int i = 0; i < a.length; i++) {

a[i]=(int)(Math.random()*50);

}

System.out.println("排序前");

for (int i = 0; i < a.length; i++) {

System.out.print(a[i]+" ");

}

System.out.println();

System.out.println("排序后");

sort(a);

for (int i = 0; i < a.length; i++) {

System.out.print(a[i]+" ");

}

}

}

时间复杂度:共进行n-1次冒泡,第一次比较n-1次,第二次比较n-2次,第n-1次比较1次。1+2+3…+n-1=n(n-1)/2,因此时间复杂度为O(n^2)

空间复杂度:只用到一个temp变量,空间复杂度为O(1)

Java实现冒泡排序相关教程

【刷题1】LeetCode 53. 最大子序和 java题解

【刷题1】LeetCode 53. 最大子序和 java题解 1.题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 2.方法一:动态规划 好简单的动态规划… 2.1 分析 状态转移方程: 如果dp[i-1]0,dp[i]=dp[i-1]+nums

Java Spring Cloud Alibaba-Seata:(三)代码的完善(分布式事

Java Spring Cloud Alibaba-Seata:(三)代码的完善(分布式事务演示)-15800字匠心巨作 代码的完善 1.数据库表导入 2.模型对象和 Mapper 对象生成 3.storage-service 代码的完善 3.1 接口设计 3.2 实现该接口 3.3 使用 Restful 暴露此接口 3.4 添加配置文件

10.网络编程-java版本

10.网络编程-java版本 网络编程 1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM

关于Java你不知道的那些事之Spring源码讲解

关于Java你不知道的那些事之Spring源码讲解 Spring源码讲解 前言 谈谈你对Spring的理解 Spring上下文 Spring初始化 SpringBean的生命周期 普通类的实例化 Spring Bean实例化过程 前言 Spring源码方面的知识 Spring bean的生命周期 Spring 工厂,Spring容器,

面向对象基础(一)

面向对象基础(一) 面向对象基础 面向对象 Java语言是一种面向对象的语言。 面向对象是一种直观而且程序结构简单的程序设计方法,比较符合人类认识现实世界的思维方式。 面向对象的三大特征:封装、继承、多态。 对象 对象是用来描述客观事物的一个实体。 如

javap命令实践

javap命令实践 1. javap CheckPlazaRegionUtil.class //显示类的基本信息 public class com..domain.util.CheckPlazaRegionUtil { public com..domain.util.CheckPlazaRegionUtil(); public static boolean checkRegion(java.lang.String); public static boo

ElasticSearch启动报错:Java HotSpot(TM) 64-Bit Server VM war

ElasticSearch启动报错:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330 1. 问题:启动 elasticsearch 出现如下报错信息 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 98

java实现猜字小游戏

闲来无事,实现一个猜数字的小游戏,目的是巩固自己的基础知识,培养敲代码的乐趣。 首先在项目中所创建的类中导包 (视频教程推荐:java课程) import java.util.Scanner;//一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 获取一个随机数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值