Java中的排序算法

引言:

        当谈到编程语言中的排序,Java 作为一种广泛使用的编程语言,提供了许多强大的排序算法来满足不同的需求。排序是一种将一组数据按照特定顺序重新排列的过程,通常是按照升序或降序排列。在 Java 中,我们可以利用内置的排序方法,也可以自定义排序算法来实现排序功能。

一、常见的排序算法

        Java 中提供了对基本类型和对象的排序方法,其中最常用的是基于比较的排序算法,例如冒泡排序、插入排序、选择排序、快速排序、归并排序等。下面我们就来详细介绍这些排序算法的概念,并给出简单的示例。

  • 冒泡排序(Bubble Sort):它重复地走访过要排序的元素列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来,直到没有相邻元素需要交换,时间复杂度为 O(n^2)。

示例代码:

public void bubbleSort(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
  • 插入排序(Insertion Sort):它构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,时间复杂度为 O(n^2)。

示例代码:

public void insertionSort(int[] arr) {
    int n = arr.length;
    for (int i = 1; i < n; ++i) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

  • 快速排序(Quick Sort):它通过一趟排序将要排序的数据分割成独立的两部分,然后分别对这两部分继续进行排序,时间复杂度为 O(nlogn)。

示例代码:

public void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

private int partition(int[] arr, int low, int high) {
    int pivot = arr[high];
    int i = (low - 1);
    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

二、内置排序方法

        除了自定义算法之外,Java 还提供了内置的排序方法,如 Arrays.sort() 和 Collections.sort()。这些方法可以用于对数组和集合进行排序,它们实际上使用了改进后的快速排序算法。

示例代码:

int[] arr = {5, 3, 8, 2, 9, 1};
Arrays.sort(arr); // 对数组进行排序

List<Integer> list = new ArrayList<>(Arrays.asList(5, 3, 8, 2, 9, 1));
Collections.sort(list); // 对集合进行排序

总结:

        无论采用内置排序方法还是自定义排序算法,掌握不同的排序原理和实现方式可以帮助我们更好地理解数据处理和算法设计的精髓。希望通过本文的介绍和示例代码,能够对 Java 中排序的概念有一个更加清晰的认识。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【airtest】自动化入门教程(二)airtest操作

目录 一、touch 二、wait 三、swipe 四、exists 五、text 六、keyevent 七、snapshot 八、sleep 九、断言 9.1 assert_exists 9.2 assert_not_exists 9.3 assert_equal 9.4 assert_not_equal 前言&#xff1a;本文主要针对aritest部分的基础操作,aritest是一个跨平…

AJAX 学习笔记(Day3)

「写在前面」 本文为黑马程序员 AJAX 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. AJAX 学习笔记&#xff08;Day1&#xff09; 目录 3 AJAX 原理 3.1 XMLHttpRequest 3…

遭遇CC攻击如何做防护策略

CC&#xff08;Challenge Collapsar&#xff09;攻击是一种常见而具有破坏力的拒绝服务攻击&#xff08;DDoS&#xff09;&#xff0c;对网络安全造成威胁。为了保护网络免受这类恶意攻击&#xff0c;采取有效的防护策略至关重要。本文将介绍一些可以帮助保护您的网络免受CC攻击…

appium环境搭建

一.appium环境搭建 1.python3 python3的下载安装这里就不多做介绍了&#xff0c;当然你也可以选择自己喜欢的语音&#xff0c;比如java… 2.jdk 1&#xff09;下载地址 官网(需登录账号)&#xff1a; https://www.oracle.com/java/technologies/downloads/ 百度网盘&…

windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案

错误描述&#xff1a; windows server 2019 安装NET Framework 3.5失败&#xff0c;提示&#xff1a;“安装一个或多个角色、角色服务或功能失败”&#xff1a;“安装一个或多个角色、角色服务或功能失败错误: 0x800f0950” 。 错误原因&#xff1a; windows 2019 server系统…

【C语言】指针详细解读2

1.const 修饰指针 1.1 const修饰变量 变量是可以修改的&#xff0c;如果把变量的地址交给⼀个指针变量&#xff0c;通过指针变量的也可以修改这个变量。 但是如果我们希望⼀个变量加上⼀些限制&#xff0c;不能被修改&#xff0c;怎么做呢&#xff1f;这就是const的作⽤。 …

力扣hot100:1.两数之和

输入中可能存在重复值 。 分析&#xff1a; 本题需要返回的是数组下标&#xff0c;因此如果需要使用排序然后双指针的话&#xff0c;需要用到哈希表&#xff0c;但是由于输入中可能存在重复值&#xff0c;因此哈希表的value值必须是vector<int>。 使用双指针求目标值targ…

Deep Learning相关概念介绍

工具&#xff1a; Anaconda: anaconda.com/products/individual。我理解是一个基于Python的AI程序开发环境&#xff0c;其作用类似于google notebook。区别是google notebook是在网页上&#xff0c;而Anaconda一般是安装在自己的服务器上。Jupyter Notebooks Anaconda激活深度…

vscode使用git

更改的文件 点击号 &#xff0c; 相当于git add 添加到暂存区 -号 取消暂存区内容 可以查看更改的前后对比 编辑器左下角点击分支&#xff0c;可以创建新分支 提交到暂存区后&#xff0c;点击 提交 &#xff0c; 编辑备注内容 &#xff0c;相当于git commit -m 提交备注内容 同…

Leaflet 初始化地图

前言 &#x1f914;&#x1f914; Leaflet系列搁置了好久&#xff0c;趁着deadline来临之际&#xff0c;我会在两周内将这个专栏的内容基本更新完毕&#xff0c;并随着项目的精进将更多优质的文章内容提供给本专栏的订阅者&#xff1b;说正事&#xff0c;在本文中&#xff0c;我…

《精益DevOps》:填补IT服务交付的认知差距,实现高效可靠的客户期望满足

写在前面 在当今的商业环境中&#xff0c;IT服务交付已经成为企业成功的关键因素之一。然而&#xff0c;实现高效、可靠、安全且符合客户期望的IT服务交付却是一项艰巨的任务。这要求服务提供商不仅具备先进的技术能力&#xff0c;还需要拥有出色的组织协作、流程管理和态势感…

IMAP和SMTP的区别与联系是什么?如何区分?

IMAP和SMTP的区别有哪些&#xff1f;IMAP和SMTP选择哪个更好&#xff1f; 在电子邮件通信的过程中&#xff0c;两个关键协议扮演着不可或缺的角色&#xff0c;它们就是IMAP和SMTP。这两个协议各有特色&#xff0c;但又紧密相连&#xff0c;共同维护着电子邮件系统的稳定运行。…

Neo4j从入门到放弃

前言 本文记录前公司在开发社交应用时&#xff0c;探索Neo4j数据库记录的一些关键信息和常见问题。希望这篇文章的一些信息能对你有所帮助。少走一些弯路。Neo4j的学习最好在搭建完后&#xff0c;它的web管理界面有一个引导教程&#xff0c;跟着它的指导手册走下教程&#xff…

内网穿透的应用-如何修改Nginx服务location代理转发规则结合cpolar实现无公网ip环境访问内网站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

【FastChat】用于训练、服务和评估大型语言模型的开放平台

FastChat 用于训练、服务和评估大型语言模型的开放平台。发布 Vicuna 和 Chatbot Arena 的存储库。 隆重推出 Vicuna&#xff0c;一款令人印象深刻的开源聊天机器人 GPT-4&#xff01; &#x1f680; 根据 GPT-4 的评估&#xff0c;Vicuna 达到了 ChatGPT/Bard 90%* 的质量&…

HQL,SQL刷题,尚硅谷

目录 相关表数据&#xff1a; ​编辑 题目及思路解析&#xff1a; 复杂查询&#xff0c;子查询 1、查询所有课程成绩均小于60分的学生的学号、姓名 2、查询没有学全所有课的学生的学号、姓名 3、查询出只选修了三门课程的全部学生的学号和姓名 总结归纳&#xff1a; 知识补充&a…

端口号被占用时的解决办法

1、查看端口占用的进程号 netstat -ano |findstr 8080 2、 找到占用端口的程序 tasklist |findstr 2264 3、kill端口 taskkill /pid 2264 /f

如何在飞书接入ChatGPT并结合内网穿透实现公网远程访问智能AI助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

XV4001KC数字输出 车载用(piezoman)

EPSON的XV4001KC角速度传感器是为满足汽车行业对高精度和高可靠性需求而设计的。它不仅提供了高级的运动监测特性&#xff0c;高精度的角速度测量和温度监测功能&#xff0c;而且其紧凑的设计6.04.83.3mm尺寸对于空间受限的车载环境来说&#xff0c;是一大优势&#xff0c;使得…

网络安全-appcms-master

一、环境 gethub上面自己找appcms-master 二、开始闯关 原理&#xff1a;在评论的时候提交可以提交到管理员列表去&#xff0c;管理员一看cookie和地址就被盗走了 点进去软件后会发现提交按钮 随便提交一下看看 放到div标签里面是不是有可能可以做&#xff0c;看看后台吧 那…