Java【数据结构】—— 冒泡排序、选择排序、直接插入排序

news2024/9/28 17:36:41

Java实现冒泡排序、选择排序、直接插入排序

  • 一、排序的概念及稳定性
  • 二、冒泡排序
    • 1.基本思想
    • 2.代码实现
  • 三、选择排序
    • 1.基本思想
    • 2.代码实现
  • 四、直接插入排序
    • 1.基本思想
    • 2.代码实现
  • 五、复杂度及稳定性分析
    • 1.冒泡排序
    • 2.选择排序
    • 3.直接插入排序

一、排序的概念及稳定性

- 概念: 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

- 稳定性: 简单来说就是在一组还未排序的数据中,两个关键字具有相同属性(相当于两个数字相等,即5 = 5)再经过排序后两个关键字的顺序不变,如以下示例。

在这里插入图片描述

二、冒泡排序

1.基本思想

冒泡排序是一种交换排序,它的基本思想是: 两两比较相邻记录的关键字,如果反序则交换,知道没有反序的记录为止。

在这里插入图片描述
以上为一趟冒泡排序的结果,此时我们已经把一个数字放到了指定排好的位置,我们下一趟排序的时候就不对这个已排好的关键字进行操作,依次类推久能把剩下的数据排序。

2.代码实现

import java.util.Arrays;

public class Bubble {
    public void sort (int[] array) {
        for (int i = 0;i < array.length - 1;i++) {
            for (int j = 0;j < array.length - i - 1;j++) {
                if (array[j] > array[j+1]) {
                    swap(array,j,j+1);
                }
            }
        }
    }

    private void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    public void print (int[] array) {
        System.out.println(Arrays.toString(array));
    }

}

//测试类
public class BubbleTest {
    public static void main(String[] args) {
        Bubble bubble = new Bubble();
        int[] array = {23, 51, 24, 82, 7, 31, 21, 36, 63};
        bubble.sort(array);
        bubble.print(array);
    }
}

三、选择排序

1.基本思想

  • 在数组中选择关键字最小(大)元素的下标
  • 将找到的下标与指定位置进行交换(第一次是0下标,依次类推)
  • 指定位置排序好后不在进行操作

在这里插入图片描述

  • 再进反复的操作知道数组有序

2.代码实现

public class Selection {
    public void sort (int[] array) {
        for (int i = 0;i < array.length;i++) {
            int minIndex = i;
            for (int j = i + 1;j < array.length;j++) {
                if (array[minIndex] > array[j]) {
                    minIndex = j;
                }
            }
            swap(array,minIndex,i);
        }
    }

    private void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}

import java.util.Arrays;

public class SelectionTest {
    public static void main(String[] args) {
        Selection selection = new Selection();
        int[] array = {23, 51, 24, 82, 7, 31, 21, 36, 63};
        selection.sort(array);
        System.out.println(Arrays.toString(array));
    }
}

四、直接插入排序

1.基本思想

  • 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。

在这里插入图片描述

在这里插入图片描述

2.代码实现

public class Insertion {
    public void sort (int[] array) {
        for (int i = 1; i < array.length; i++) {
            for (int j = i - 1;j >= 0;j--) {
                if (array[j+1] < array[j] ) {
                    swap(array,j+1,j);
                } else {
                    break;
                }
            }
        }
    }

    private void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}

public class InsertionTest {
    public static void main(String[] args) {
        Insertion insertion = new Insertion();
        int[] array = {23, 51, 24, 82, 7, 31, 21, 36, 63};
        insertion.sort(array);
        System.out.println(Arrays.toString(array));
    }
}

五、复杂度及稳定性分析

1.冒泡排序

  • 时间复杂度:O(N^2)
  • 空间复杂度:O(1)
  • 稳定性:稳定

2.选择排序

  • 时间复杂度:O(N^2)
  • 空间复杂度:O(1)
  • 稳定性:不稳定

3.直接插入排序

  • 时间复杂度:O(N^2)
  • 空间复杂度:O(1)
  • 稳定性:稳定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件断点续传

1、前端上传文件前请求媒资接口层检查文件是否存在&#xff0c;如果已经存在则不再上传。 2、如果文件在系统不存在前端开始上传&#xff0c;首先对视频文件进行分块 3、前端分块进行上传&#xff0c;上传前首先检查分块是否上传&#xff0c;如已上传则不再上传&#xff0c;如…

奇舞周刊第482期:每天都在用,也没整明白的 React Hook

记得点击文章末尾的“ 阅读原文 ”查看哟~下面先一起看下本期周刊 摘要 吧~奇舞推荐■ ■ ■每天都在用&#xff0c;也没整明白的 React Hook推荐理由&#xff1a;针对我们经常使用的 React Hook&#xff0c;本文详细介绍了 useState、useEffect、useContext、useCallback、use…

IP协议格式、IP地址管理、路由选择

目录 一、IP协议格式 16位总长度 ip协议针对传输层的UCP协议或者TCP协议&#xff0c;进行传输的时候&#xff0c;需不需要进行分片传输&#xff08;拆包传输&#xff09; 如何进行分片 和 组合分片 8位生存时间&#xff1a; 8位协议、16位校验和、32位源端口、32位目的端…

Agilent E4982A、Keysight E4982A、LCR 表,1 MHz 至 3 GHz

Agilent E4982A、Keysight E4982A、HP E4982A LCR 表&#xff0c;1 MHz 至 3 GHz 产品概览 KEYSIGHT E4982A&#xff08;安捷伦&#xff09; Keysight E4982A LCR 表为需要高频&#xff08;1 MHz 至 3 GHz&#xff09;阻抗测试的无源元件制造行业提供一流的性能&#xff0c…

Redis实战11-实现优惠券秒杀下单

本篇&#xff0c;咱们来实现优惠券秒杀下单功能。通过本篇学习&#xff0c;我们将会有如下收获&#xff1a; 1&#xff1a;优惠券领券业务逻辑&#xff1b; 2&#xff1a;分析在高并发情况下&#xff0c;出现超卖问题产生的原因&#xff1b; 3&#xff1a;解决超卖问题两种方…

快速排序算法原理 Quicksort —— 图解(精讲) JAVA

快速排序是 Java 中 sort 函数主要的排序方法&#xff0c;所以今天要对快速排序法这种重要算法的详细原理进行分析。 思路&#xff1a;首先快速排序之所以高效一部分原因是利用了离散数学中的传递性。 例如 1 < 2 且 2 < 3 所以可以推出 1 < 3。在快速排序的过程中巧…

C++——C++11 第一篇

目录 统一的列表初始化 &#xff5b;&#xff5d;初始化 decltype ​编辑 nullptr STL中一些变化 右值引用和移动语义 左值引用和右值引用 总结 左值引用优缺点 右值引用&#xff08;将亡值&#xff09; 拷贝赋值和移动赋值 万能引用|完美转发 移动构造和移动赋值注意…

C#操作字符串方法 [万余字总结 · 详细]

C#操作字符串方法总结C#常用字符串函数大全C#常用字符串操作方法C#操作字符串方法总结C#常用字符串函数大全 Compare 比较字符串的内容&#xff0c;考虑文化背景(场所)&#xff0c;确定某些字符是否相等 CompareOrdinal 与Compare一样&#xff0c;但不考虑文化背景 Format 格…

5.3 BGP路由黑洞

5.2.3实验3:BGP路由黑洞 1. 实验目的 熟悉BGP路由黑洞的应用场景掌握BGP水平分割的配置方法2. 实验拓扑 实验拓扑如图5-3所示: 图5-3:BGP路由黑洞 3. 实验步骤 配置IP地址 R1的配置 <Huawei>syst

前端开发常用案例(一)

前端开发常用案例1.实现三角形百度热榜样式分页效果小米商城自动轮播图效果二级下拉菜单效果时间轴效果展示音乐排行榜效果鼠标移入文字加载动画鼠标悬停缩放效果1.实现三角形 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8…

CCNP350-401学习笔记(51-100题)

51、Which statement about a fabric access point is true?A. It is in local mode and must be connected directly to the fabric edge switch. B. It is in local mode and must be connected directly to the fabric border node C. It is in FlexConnect mode and must …

LVGL开发教程:二、ESP-IDF 使用CmakeList管理自己的文件以及文件夹

本文需要已经安装了Vscode+IDF插件没有安装的请提前安装一下,IDF插件为乐鑫的插件不需要翻墙。需要环境搭建请看下面链接。 环境搭建: VScode+platformIO和Vscode+ESP-IDF两种开发环境搭建 项目例程下载地址: IDF-CmakeTes,密码:8888 另外,由于你和我的路径不一致,下载的工…

富足金字塔:人的努力是为了扩大选择的范围

人的努力是为了扩大选择的范围&#xff0c;这是熵减的另一种表述。富足金字塔代表着人生的三重境界。第一层是温饱。人需要食物、水、住所。第二层是品质。能源、ICT、教育带来更有品质的生活&#xff0c;如智能门锁、智能马桶、扫地机、洗碗机、洗衣烘衣机。第三层是梦想。包括…

netty群聊系统

1设计思路&#xff1a;启动一个服务端&#xff0c;多个客户端第一个客户端启动时&#xff0c;会告诉服务器上线了第二个客户端启动时&#xff0c;告诉服务器上线&#xff0c;并且通知第一个启动的客户端第三个客户端启动时&#xff0c;告诉服务器上线&#xff0c;并且通知第一个…

应用上架小技能:2.1 蓝牙权限使用说明和5.1.1权限使用说明

文章目录 引言I Guideline 2.1 - Information NeededII Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage引言 App是用来蓝牙进行打印小票,需要提供演示视频摄像头、位置和蓝牙的使用场景需要在应用配置文件Info.plist进行说明。uniapp权限说明配置界面 I G…

利尔达在北交所上市:总市值突破29亿元,叶文光为董事长

2月17日&#xff0c;利尔达科技集团股份有限公司&#xff08;下称“利尔达”&#xff0c;BJ:832149&#xff09;在北京证券交易所上市。本次上市&#xff0c;利尔达的发行价格为5.00元/股&#xff0c;发行数量为1980万股&#xff0c;发行市盈率为12.29倍&#xff0c;募资总额为…

2023情人节正经性生活调研报告

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2023年1月份热门报告合集ChatGPT的发展历程、原理、技术架构及未来方向2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图今天给大家带来丁香医生最新…

Java Number Math 类,超详细整理,适合新手入门

目录 一、什么是Java Number类&#xff1f; 二、Java Number类提供了哪些基本的数字操作&#xff1f; 三、什么是包装类&#xff1f; 所有的包装类都是抽象类 Number 的子类。 四、什么是Java Math 类 Test类案例&#xff1a;&#xff08;Math.PI 表示一个圆的周长与直径…

代码随想录【Day17】| 513. 找树左下角的值、112. 路径总和、构造二叉树(前+中,中+后)

513. 找树左下角的值 题目链接 题目描述&#xff1a; 给定一个二叉树&#xff0c;在树的最后一行找到最左边的值。 示例 1: 示例2&#xff1a; 难点&#xff1a; 递归法 思路&#xff1a; 这题要找 最底层最左边 很容易就想到层序遍历 递归法的话&#xff0c;有点复杂…

Cosmos NDP编程框架(easyNDP)说明文档

Cosmos NDP编程框架(easyNDP)说明 更新时间&#xff1a;2023-2-17 作者&#xff1a;Gary 一.简介 本文档主要用于说明本简易NDP框架——easyNDP framework的架构、开发新应用以及使用的方法。 在开始前&#xff0c;有一个概念需要提前说明&#xff0c;文档中的块这个概念&…