Java 十大排序算法之冒泡排序刨析
作者:龍弟-idea 发布时间:2022-07-05 19:30:29
标签:Java,冒泡排序,排序算法
冒泡排序原理
①比较相邻的元素,如果前一个元素比后一个元素大,则交换这两个元素的位置
②对每一对相邻的元素循环上面的步骤,最终最后面的元素就是最大值
冒泡排序API设计
类名 | Bubble |
构造方法 | Bubble:创建Bubble对象 |
成员方法 | 1.public static void sort(Comparable[] a):对数组内元素进行排序 2.private static void greater(Comparable v,Comparable w);判断v是否大于w 3.private static void exchange(Comparable[] a,int x,int y):交换a数组中,索引x和索引y处的值 |
冒泡排序的代码实现
public class Bubble {
//对数组a进行排序
public static void sort(Comparable[] a){
for(int i=a.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(greater(a[j],a[j+1])){
exchange(a,j,j+1);
}
}
}
}
//比较v元素是否大于w元素
private static boolean greater(Comparable v,Comparable w){
return v.compareTo(w)>0;
}
//数组元素x和y交换位置
private static void exchange(Comparable[] a,int x,int y){
Comparable t=a[x];
a[x]=a[y];
a[y]=t;
}
}
//测试代码
class Test{
public static void main(String[] args) {
Integer[] a={4,5,6,3,2,1};
Bubble.sort(a);
System.out.println(Arrays.toString(a));
}
}
测试结果:
冒泡排序的时间复杂度分析
冒泡排序虽然采用了双层for循环遍历,但是真正完成排序的代码在内循环中,所以主要分析内层循环体的执行次数即可
在最坏的情况下。即数组为{6,5,4,3,2,1}的逆序
元素的比较次数为:(N-1)+(N-2)+(N-3)+...+2+1=
((N-1)+1)*(N-1)/2=N^2/2-N/2;
元素的交换次数为:(N-1)+(N-2)+(N-3)+...+2+1=
((N-1)+1)*(N-1)/2=N^2/2-N/2;
总执行次数为:2*(N^2/2-N/2)=N^2-N;
根据大O推导法则,保留最高阶项,即冒泡排序的时间复杂度为O(N^2)
来源:https://blog.csdn.net/weixin_48838340/article/details/121341772


猜你喜欢
- 软硬件环境Macbook Pro MGX 72Android studio 2.1.2Android 5.1.1前言上一篇介绍了如何获取et
- 一丶前言在之前我们学习了SpringBoot自动装配如何实现的,我们总结了Spring IOC的底层原理。但是我们还是不知道SpringAp
- 淘宝返回的数据为:{"code":0,"data":{"country":&qu
- 安装APKpublic class DownLoadApk { public static SharedPreferences shared
- 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工
- 调用Bmob第三方服务器实现短信验证的功能,大致思路如下:随机产生6位数字,然后调用Bmob的请求短发函数发送者六位数到服务器,然后服务器给
- 一、注解的概念1、注解官方解释注解叫元数据,一种代码级别的说明,它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举在同一个层次,它可
- 导航和路由Flutter提供了一个完整的用于在屏幕之间导航和处理深层链接的系统。没有复杂深度链接的小型应用程序可以使用Navigator,而
- 最近在学ssh,一直搞不懂$,%,#的区别,做了点小练习,慢慢也懂了一点,将自己所学的也记录下来吧。 存在一下一个实
- 本文主要介绍了idea实现类快捷生成接口方法示例,分享给大家,具体如下:接口类实现类当我们实现了接口后,并没有像eclipse那样,鼠标放上
- 前言基于安卓平台的连续滚动图像组件ContinuousScrollableImageView(https://github.com/Cutt
- 本文实例讲述了Spring和Hibernate的整合操作。分享给大家供大家参考,具体如下:一 web配置<?xml version=&
- 本文实例讲述了Java截取字符串的方法。分享给大家供大家参考。具体实现方法如下:public static void main(String
- StreamAPI中的stream不能被重复消费,一旦它被使用,stream就被关闭了,别的地方再消费它就会抛IllegalStateExc
- 避免"索引越界"错误的规则如下(针对C++):不要使用静态或动态分配的数组,改用array或vector模板不要使用带方
- 既然是一个网关。那么全局过滤器肯定是少不了的一个存在。像是鉴权、认证啥的不可能每个服务都做一次,一般都是在网关处就搞定了。Zuul他就有很强
- google benchmark已经为我们提供了类似的功能,而且使用相当简单。具体的解释在后面,我们先来看几个例子,我们人为制造几个时间复杂
- spring boot 使用POI读取Excel文件Excel文件目录Excel模板文件存了resourse目录下,如下图:<depe
- 一、POI的定义JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 200
- System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。一.优点1. 支持