5秒用Java写一个快速排序算法?这个我在行

news2024/11/16 23:59:38

快速排序是一种非常高效的排序算法,由英国计算机科学家霍尔在1960年提出。它的基本思想是选择一个基准元素将待排序数组分成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大,然后对这两部分再分别进行快速排序,整个排序过程可以递归进行。

这种算法的主要步骤是:

  1. 选择一个元素作为基准(pivot)。
  2. 把数组分为两部分:一部分包含所有小于基准的元素,另一部分包含所有大于或等于基准的元素。这个过程称为分区(partition)操作。
  3. 对这两个子数组进行递归排序

下面是一个由FuncGPT(慧函数)生成的用Java实现快速排序的基本示例:

// 类名:QuickSort
// 函数名:quickSort
// 函数功能:使用快速排序算法对数组进行排序
// POM依赖包:无

public class QuickSort {

    /**
     * 使用快速排序算法对数组进行排序
     * @param arr 待排序的数组
     */
    public static void quickSort(int[] arr) {
        if (arr == null || arr.length <= 1) {
            return;
        }
        sort(arr, 0, arr.length - 1);
    }

    /**
     * 快速排序的递归实现
     * @param arr 待排序的数组
     * @param low 左边界
     * @param high 右边界
     */
    private static void sort(int[] arr, int low, int high) {
        if (low < high) {
            int pivot = partition(arr, low, high); // 获取基准值的索引
            sort(arr, low, pivot - 1); // 对基准值左侧的子数组进行排序
            sort(arr, pivot + 1, high); // 对基准值右侧的子数组进行排序
        }
    }

    /**
     * 快速排序的分区实现
     * @param arr 待排序的数组
     * @param low 左边界
     * @param high 右边界
     * @return 选择的基准值的索引
     */
    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[low]; // 选择第一个元素作为基准值
        int i = low + 1;
        int j = high;

        while (i <= j) {
            while (i <= j && arr[i] <= pivot) {
                i++;
            }

            while (i <= j && arr[j] > pivot) {
                j--;
            }

            if (i < j) {
                swap(arr, i, j);
            }
        }

        swap(arr, low, j); // 将基准值放到正确的位置上

        return j;
    }

    /**
     * 交换数组中两个位置的元素
     * @param arr 数组
     * @param i 位置1
     * @param j 位置2
     */
    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] arr = new int[]{9, 5, 1, 8, 3, 7, 4, 2, 6};
        quickSort(arr);
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}
```

// 函数示例
// 使用快速排序算法对数组进行排序示例
// 入参:arr,待排序的数组
// 出参:无,直接对输入的数组进行排序
// 调用示例:
// int[] arr = new int[]{9, 5, 1, 8, 3, 7, 4, 2, 6};
// QuickSort.quickSort(arr);
// 输出结果:例如,对数组[9, 5, 1, 8, 3, 7, 4, 2, 6]进行排序
// 排序后的数组为[1, 2, 3, 4, 5, 6, 7, 8, 9]
// 则输出结果为:1 2 3 4 5 6 7 8 9
```
// 温馨提示:以上代码由 FuncGPT 生成,编译打包请使用 QuickSort.java 文件。

这段代码中的主要函数包括:

  1. quickSort(int[ ] arr): 这是快速排序的入口函数,它接受一个整数数组作为参数,并对它进行排序。如果输入的数组为空或者只包含一个元素,这个函数就会直接返回。
  2. sort(int[ ] arr, int low, int high): 这是一个递归函数,用于对数组的子区间进行排序。如果左边界 low 小于右边界 high,它会选择一个基准元素,然后对基准元素左侧和右侧的子数组分别进行递归排序。
  3. partition(int[ ] arr, int low, int high): 这个函数用于实现快速排序中的分区操作。它选择数组中的一个基准元素,然后把数组中的其他元素移动到基准元素的左侧或右侧。在这个过程中,小于基准元素的元素会被移动到基准元素的左侧,大于基准元素的元素会被移动到基准元素的右侧。这个函数返回的是基准元素在排序后数组中的位置。
  4. swap(int[ ] arr, int i, int j): 这个函数用于交换数组中两个位置的元素。在main函数中,创建了一个待排序的数组,然后调用quickSort函数对其进行排序,最后打印排序后的数组。如果想知道排序后的结果是什么,你可以运行这段代码并查看控制台输出。这个例子中,输入的数组是 [9, 5, 1, 8, 3, 7, 4, 2, 6],经过快速排序后,输出的结果是 [1, 2, 3, 4, 5, 6, 7, 8, 9]

以上就是通过FuncGPT(慧函数)用Java写的一个快速排序算法的基本流程。当然,实际使用中,我们还需要考虑一些其他的因素,比如如何选择一个好的基准元素(这通常会影响排序的效率),以及在内存有限的情况下如何处理大型数组(这通常会影响程序的稳定性)。而这些,采用代码编写最佳实践及大规模机器联合训练的方式诞生的FuncGPT(慧函数)都已经帮你实现。我们将以上代码放到可以媲美ChatGPT—4的文心一言中,得到的评价是:这个Java代码实现了一个结构清晰、易于理解和使用的快速排序算法(详情见截图)。

作为全栈式全自动软件开发工具飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。目前开发免费使用,下载链接:https://suo.im/76V9w

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

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

相关文章

雷军在微博发文:小米澎湃 OS(Xiaomi HyperOS)正式版已完成封包

本心、输入输出、结果 文章目录 雷军在微博发文&#xff1a;小米澎湃 OS&#xff08;Xiaomi HyperOS&#xff09;正式版已完成封包前言搭载 小米澎湃 OS&#xff08;Xiaomi HyperOS&#xff09;的小米 14回顾 MIUI小米澎湃 OS&#xff08;Xiaomi HyperOS&#xff09; 相关跳转小…

spring boot MongoDB实战

项目搭建 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

中文编程语言开发工具开发的软件案例:定制开发扫码识别位置程序适用于车间物品摆放管理

中文编程语言开发工具开发的软件案例&#xff1a;定制开发扫码识别位置程序适用于车间物品摆放管理 中文编程语言开发工具开发的软件案例&#xff1a;定制开发扫码识别位置程序适用于车间物品摆放管理&#xff0c; 中文编程系统化教程&#xff0c;不需英语基础。学习链接 htt…

string类模拟实现(c++)(学习笔记)

string 1.构造函数1.1 不带参构造1.2 带参数的构造函数1.3 合并两个构造函数。 2. 析构函数3.拷贝构造函数4. 赋值运算符重载5. size()/capacity()6. 解引用[]8.iterator迭代器7.Print()8.> 8. push_back()&append()8.1 reserve() 9. 10.insert()10.1 任意位置插入一个字…

在线客服软件的市场需求及前景如何?

随着互联网的不断发展&#xff0c;越来越多的企业开始意识到在线客服软件在客户服务中的重要作用。现在&#xff0c;各种形态的在线客服软件涌现出来&#xff0c;如何选择适合自己公司的线上客服软件成为了企业面临的一个挑战。本文将从市场需求和前景方面分析在线客服软件行业…

【Loopback Detection 环回检测以及原理解读】

Loopback Detection简介 Loopback Detection&#xff08;环回检测&#xff09;通过周期性发送环回检测报文来检测设备下挂网络是否存在环路。 网络中的环路会导致设备对广播、组播以及未知单播等报文进行重复发送&#xff0c;造成网络资源浪费甚至网络瘫痪。为了能够及时发现…

MS4553S双向电平转换器可pin对pin兼容TXB0102/TXS0102

MS4553S是一款双向电平转换器&#xff0c;可以用作混合电压的数字信号系统中。其使用两个独立构架的电源供电&#xff0c;A端供电电压范围是1.65V到5.5V&#xff0c;B端供电电压范围是2.3V到5.5V。可用在电压为1.8V、2.5V、3.3V和5V的信号转换系统中。当OE端为低电平时&#xf…

大学生毕业嵌入式和JAVA哪条未来更有前景?

今日话题&#xff0c;大学生毕业后选择嵌入式和Java两个岗位哪个更具前景&#xff1f;答案因个人情况而异。通常来说&#xff0c;对于零基础转行的同学&#xff0c;学习Java可能会是一个更广泛选择的建议&#xff0c;因为Java岗位更多&#xff0c;且不需要涉及硬件知识。然而&a…

Live800:一个优秀的客服应具备哪些技能?

一个优秀的客服应该具备哪些技能&#xff1f;这是每个企业在招聘和培训客服人员时都需要考虑的问题。一名优秀的客服不仅需要善于沟通&#xff0c;还需要具备专业知识、灵活应变、耐心细致等多方面的能力。在这篇文章中&#xff0c;我们将从多个方面探讨一个优秀客服应该具备什…

MATLAB——极限学习机参考程序

欢迎关注“电击小子程高兴的MATLAB小屋” %% I. 清空环境变量 clear all clc %% II. 训练集/测试集产生 %% % 1. 导入数据 load iris_data.mat %% % 2. 随机产生训练集和测试集 P_train []; T_train []; P_test []; T_test []; for i 1:3 temp_input features((i-…

Bug小能手系列(python)_12: 使用mne库读取.set文件报错 TypeError: ‘int‘ object is not iterable

使用mne库读取.set文件报错 0 引言1. 报错原因2. 推荐解决方案3. 总结 0 引言 在使用mne库读取.set文件&#xff0c;然后对文件进行处理。在运行过程中出现报错&#xff1a;TypeError: int object is not iterable 其中&#xff0c;代码库包的版本这里主要介绍mne的版本&…

MYSQL 连接

高频 SQL 50 题&#xff08;基础版&#xff09; - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 1378. 使用唯一标识码替换员工ID SELECT COALESCE(unique_id, NULL) AS unique_id,name FROM Employees LEFT JOIN EmployeeUNI ON Employees.…

7.MidBook项目经验之阿里OSS,微信支付(退款),定时任务,图表数据处理

1.阿里云实名认证 阿里云对象存储oss,标准高频率访问, 低频访问存储,归档存储(根本不经常访问) 冗余存储(备份) 读写权限(所有人还是自己访问) Component public class ConstantOssPropertiesUtils implements InitializingBean {不用注入,由spring创建bean使用流 MultipartFil…

SpringBoot整合RabbitMQ并实现消息发送与接收

系列文章目录 解析JSON格式参数 & 修改对象的key VUE整合Echarts实现简单的数据可视化 Java中运用BigDecimal对字符串的数值进行加减乘除等操作 List&#xff1c;HashMap&#xff1c;String,String&#xff1e;&#xff1e;实现自定义字符串排序&#xff08;key排序、Valu…

Node介绍(nvm安装和npm常用命令)

文章目录 Node 介绍为什么要学习 Node.jsNode.js 是什么Node能做什么nvm常用的 nvm 命令npm 快捷键npm 常用命令切换 npm 下包镜像源常用命令 Node 介绍 为什么要学习 Node.js 企业需求 具有服务端开发经验更改front-endback-end全栈开发工程师基本的网站开发能力 服务端前端…

TP4067带电池反接保护500MA线性锂电池充电芯片

概述 TP4067 是一款完整的单节锂电池充电器&#xff0c;带电池正负极反接保护输入电源正负极反接保护的单芯片&#xff0c;兼容大小3mA-600mA充电电流。采用涓流、恒流、恒压控制&#xff0c;SOT23-6封装与较少的外部元件数目使得TP4067成为便携式应用的理想选择.TP4067可以适…

ims-go项目搭建

通过集成开发工具Goland创建项目 整合Gin框架&#xff0c;在终端中输入如下命令&#xff1a; go get -u github.com/gin-gonic/gin 整合Gorm&#xff0c;安装命令如下&#xff1a; go get -u gorm.io/gorm 安装sqlserver驱动&#xff0c;安装命令如下&#xff1a; go get -u…

docker报错问题解决:Error Invalid or corrupt jarfile app.jar

文章目录 1.问题描述2.问题分析3.问题解决 1.问题描述 此时处在 /home/ubuntu/app 目录下&#xff0c;并且在该目录下有一个 jenkins-0.0.1-SNAPSHOT.jar。 我在 /home/ubuntu/app 目录下执行了 docker 容器运行命令&#xff1a; # 映射 8859 端口 # 容器名为 jenkins-demo #…

常用Python自动化测试框架有哪些?优缺点对比

随着技术的进步和自动化技术的出现&#xff0c;市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整&#xff0c;这些自动化测试框架就能够开箱即用&#xff0c;大大节省了测试时间。而且由于这些框架被广泛使用&#xff0c;他们具有很好的健壮性&#xff0…

Unity DOTS System与SystemGroup概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面System关键概念&#xff0c;方便大家上手学习掌握Unity DOTS开发。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; System是迭代计算与处理World中的…