首页 > 编程语言 >Java实现冒泡排序和插入排序算法

Java实现冒泡排序和插入排序算法

时间:2024-08-20 12:27:13浏览次数:13  
标签:arr Java 17 int 插入排序 13 冒泡排序 排序

冒泡排序

算法步骤

1、比较相邻的元素,如果第一个比第二个大,就交换它们两个;
2、对每一对相邻元素作同样的比价,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数;
3、针对所有的元素重复以上的步骤,除了数组最后已经排好序的数组;
4、重复步骤1~3,直到排序完成。

代码实现

package com.example.helloworld;

import java.util.Arrays;

public class BubbleSort {
    public static void bubblesort(int[] arr){
        int len = arr.length;
        for (int i = 0; i < len-1; i++){
            boolean flag = true;
            for (int j = 0; j < len-i-1; j++){
                if (arr[j] > arr[j+1]){
                    int tmp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tmp;
                    flag = false;
                }
            }
            System.out.println("第" + (i + 1) + "轮排序结果:" + Arrays.toString(arr));
            if (flag){
                break;
            }
        }
    }
    public static void main(String args[]){
        int[] array_1 = {2,5,6,7,8,1,9};
        int[] array_2 = {23,12,67,45,99,17,13};
        System.out.println("array_1冒泡排序结果为:");
        BubbleSort.bubblesort(array_1);
        System.out.println("array_2冒泡排序结果为:");
        BubbleSort.bubblesort(array_2);
    }
}
array_1冒泡排序结果为:
第1轮排序结果:[2, 5, 6, 7, 1, 8, 9]
第2轮排序结果:[2, 5, 6, 1, 7, 8, 9]
第3轮排序结果:[2, 5, 1, 6, 7, 8, 9]
第4轮排序结果:[2, 1, 5, 6, 7, 8, 9]
第5轮排序结果:[1, 2, 5, 6, 7, 8, 9]
第6轮排序结果:[1, 2, 5, 6, 7, 8, 9]
array_2冒泡排序结果为:
第1轮排序结果:[12, 23, 45, 67, 17, 13, 99]
第2轮排序结果:[12, 23, 45, 17, 13, 67, 99]
第3轮排序结果:[12, 23, 17, 13, 45, 67, 99]
第4轮排序结果:[12, 17, 13, 23, 45, 67, 99]
第5轮排序结果:[12, 13, 17, 23, 45, 67, 99]
第6轮排序结果:[12, 13, 17, 23, 45, 67, 99]

插入排序

算法步骤

1、首先从第一个元素开始,该元素被认为是有序的;
2、取出下一个元素,在已经排序的元素序列中从后往前进行扫描;
3、如果该已排好序的元素大于新元素,则将该元素移到下一位置;
4、重复步骤3一直往前进行扫描比较,直到找到已排序的元素小于或者等于新元素的位置;
5、将新元素插入到该位置后;
6、重复步骤2~5。

代码实现

package com.example.helloworld;

import java.util.Arrays;

public class InsertSort {
    public static void insertsort(int[] arr){
        for (int i = 1; i < arr.length; i++){
            int val = arr[i], j = i;
            while (j > 0 && val < arr[j - 1]){
                arr[j] = arr[j - 1];
                j--;
            }
            arr[j] = val;
            System.out.println("第" + i + "轮排序结果:" + Arrays.toString(arr));
        }
    }
    public static void main(String args[]){
        int[] arr_1 = {17,13,5,2,6,9};
        System.out.println("array_1插入排序结果为:");
        InsertSort.insertsort(arr_1);
    }
}
array_1插入排序结果为:
第1轮排序结果:[13, 17, 5, 2, 6, 9]
第2轮排序结果:[5, 13, 17, 2, 6, 9]
第3轮排序结果:[2, 5, 13, 17, 6, 9]
第4轮排序结果:[2, 5, 6, 13, 17, 9]
第5轮排序结果:[2, 5, 6, 9, 13, 17]

算法比较

冒泡排序 插入排序
平均时间复杂度 O(n^2) O(n^2)
最好时间复杂度 O(n) O(n)
最坏时间复杂度 O(n^2) O(n^2)
空间复杂度 O(1) O(1)
稳定性 稳定 稳定
适用情况 小规模数据或基本有序的数据 小规模数据或部分有序的数据
  • 插入排序是从正向有序的,而冒泡排序是从逆向有序,冒泡排序是每次最后的一个值都为最大
  • 插入排序是将无序的元素插入有序的元素序列中,插入后仍然有序;冒泡排序是比较相邻的元素,直到序列变成有序为止

标签:arr,Java,17,int,插入排序,13,冒泡排序,排序
From: https://www.cnblogs.com/shihongpin/p/18368957

相关文章

  • 【Java】 方法引用与Lambda(快速上手)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1方法引用五、总结:一、前言Calculator::plus看到::好奇有什么用二、学习内容:方法引用......
  • JSP基于Java烟支信息管理系统z019j--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:员工,烟支类型,烟支信息,检测信息,烟支入库,烟支出库开题报告内容一、项目背景与意义随着烟草行业的快速发展和市场竞争的加剧,烟支生产过程中的信息管......
  • JSP基于Java高校食堂物资管理系统9h03q
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,商品分类,商品信息,商品采购,食堂,商品需求,商品配给,商品统计技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spri......
  • Java泛型大揭秘学习笔记
    泛型概述引入背景:Java泛型在JDK5中引入,目的是增强类型系统和表达能力。主要优势:类型安全:编译时类型检查,避免运行时错误。消除强制类型转换:简化代码,提高可读性。提高代码重用性:创建通用代码,适应不同场景。性能提升:减少自动装箱拆箱操作。泛型基础泛型定义:允许类型作......
  • 【Minecraft】京东云轻量云主机搭建我的世界联机服务器教程(Java版)
    一、Minecraft介绍《我的世界》(英语:Minecraft)是一款沙盒游戏,最初由瑞典游戏设计师马库斯·阿列克谢·泊松单独开发,随后由2009年成立的瑞典公司Mojang开发并发行。玩家可以在一个随机生成的3D世界内,以带材质贴图的立方体为基础进行游戏。游戏中的其他特色包括探索世界、采集资......
  • Java 设计模式
    23种设计模式创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模......
  • java中List列表转成子父集列表
    一、前言       在Java中,如果你有一个表示父子关系的列表,并且想要把这个列表转成一个子父集list列表树目录,一般来说想要把list列表转成一个子父集列表,这个对象需要在属性中必须要有几个字段,id(节点id)、parentId(指向父节点id)、children(子节点),通过三个字段可以组装成一......
  • 【第66课】Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 【第67课】Java安全&JNDI&RMI&LDAP&五大不安全组件&RCE执行&不出网
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 【第68课】Java安全&原生反序列化&SpringBoot攻防&heapdump提取&CVE
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......