排序算法的奥秘:JAVA中的揭秘与实现

2023-09-21 16:54:16

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过多次迭代比较和交换相邻的元素来排序一个数组。每次迭代,较大的元素会逐渐"冒泡"到数组的末尾。以下是Java中实现冒泡排序的示例代码:

public class BubbleSort {

    public static void bubbleSort(int[] arr) {

        int n = arr.length;

        

        // 进行n-1次迭代,每次迭代将一个最大的元素移到末尾

        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;

                }

            }

        }

    }

    public static void main(String[] args) {

        int[] arr = {64, 34, 25, 12, 22, 11, 90};

        System.out.println("排序前的数组:");

        for (int num : arr) {

            System.out.print(num + " ");

        }

        bubbleSort(arr);

        System.out.println("\n排序后的数组:");

        for (int num : arr) {

            System.out.print(num + " ");

        }

    }

}

       在上述代码中,bubbleSort方法实现了冒泡排序算法。它通过嵌套的循环进行迭代,每次迭代比较相邻的元素并根据需要交换它们的位置。在每次迭代中,最大的元素会逐渐"冒泡"到数组的末尾。main方法中的示例展示了如何使用该算法对一个数组进行排序。

      运行代码,你将看到排序前和排序后的数组输出。注意,冒泡排序算法的时间复杂度为O(n^2),因此它在大规模数据集上的性能可能不如其他高效的排序算法。

插入排序(Insertion Sort)是一种简单的排序算法,它通过将一个元素逐个插入已排序的序列中,最终完成整个数组的排序。具体来说,插入排序从第二个元素开始,逐个将其插入到已排序的子数组中,直到所有元素都被插入到适当的位置为止。以下是Java中实现插入排序的示例代码:

public class InsertionSort {

    public static void insertionSort(int[] arr) {

        int n = arr.length;

        

        for (int i = 1; i < n; i++) {

            int key = arr[i];

            int j = i - 1;

            

            // 将arr[0...i-1]中的元素依次向后移动,直到找到key的正确位置

            while (j >= 0 && arr[j] > key) {

                arr[j + 1] = arr[j];

                j--;

            }

            

            arr[j + 1] = key;

        }

    }

    public static void main(String[] args) {

        int[] arr = {64, 34, 25, 12, 22, 11, 90};

        System.out.println("排序前的数组:");

        for (int num : arr) {

            System.out.print(num + " ");

        }

        insertionSort(arr);

        System.out.println("\n排序后的数组:");

        for (int num : arr) {

            System.out.print(num + " ");

        }

    }

}

      在上述代码中,insertionSort方法实现了插入排序算法。它从数组的第二个元素开始,将当前元素保存为key,然后将比key大的元素向后移动一个位置,直到找到key的正确位置。main方法中的示例展示了如何使用该算法对一个数组进行排序。

      运行代码,你将看到排序前和排序后的数组输出。插入排序算法的时间复杂度为O(n^2),但在部分已排序或接近排序的情况下,它的性能较好。插入排序还具有原地排序的特点,不需要额外的内存空间。

选择排序(Selection Sort)是一种简单的排序算法,它通过每次选择未排序部分中的最小元素,并将其放置在已排序部分的末尾,逐步完成整个数组的排序。具体来说,选择排序从第一个元素开始,逐个找到未排序部分的最小元素,并与未排序部分的第一个元素交换位置。以下是Java中实现选择排序的示例代码:

public class SelectionSort {

    public static void selectionSort(int[] arr) {

        int n = arr.length;

        

        for (int i = 0; i < n - 1; i++) {

            int minIndex = i;

            

            // 在未排序部分中找到最小的元素的索引

            for (int j = i + 1; j < n; j++) {

                if (arr[j] < arr[minIndex]) {

                    minIndex = j;

                }

            }

            

            // 将最小元素与未排序部分的第一个元素交换位置

            int temp = arr[minIndex];

            arr[minIndex] = arr[i];

            arr[i] = temp;

        }

    }

    public static void main(String[] args) {

        int[] arr = {64, 34, 25, 12, 22, 11, 90};

        System.out.println("排序前的数组:");

        for (int num : arr) {

            System.out.print(num + " ");

        }

        selectionSort(arr);

        System.out.println("\n排序后的数组:");

        for (int num : arr) {

            System.out.print(num + " ");

        }

    }

}

      在上述代码中,selectionSort方法实现了选择排序算法。它通过嵌套的循环迭代,每次迭代找到未排序部分的最小元素,并与未排序部分的第一个元素交换位置。main方法中的示例展示了如何使用该算法对一个数组进行排序。

更多推荐

list的介绍及使用

1.list的介绍及使用1.1list的介绍1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3.list与forward_list非常相似:最主要

c语言进阶部分详解(指针进阶2)

大家好!我快马加鞭接着写出指针部分part2部分。第一部分见:c语言进阶部分详解(指针进阶1)_总之就是非常唔姆的博客-CSDN博客指针初阶部分见:c语言进阶部分详解(指针初阶)_总之就是非常唔姆的博客-CSDN博客一.函数指针1.讲解与实例函数指针:在C语言中,函数指针是指向函数的指针变量。它可以像其他变量一样存储在

命名和代码风格

一段代码,一个方法后面要打换行!!!!api的js代码引入的时候要分开回车空行,例如api的Project.js命名规则:t-dialog控件显示的visible命名的时候例如:visibleVerify,显示审核letself=this的意义,外面的this不是find查询一个对象,search查询多个对象,查多个用

通过Sealos 180秒部署一套K8S集群

通过Sealos180秒部署一套K8S集群一、主机准备1.1主机操作系统说明序号操作系统及版本备注1CentOS7u91.2主机硬件配置说明k8s集群CPU及内存最低分别为2颗CPU、2G内存,硬盘建议为100G+需求CPU内存硬盘角色主机名值8C8G1024GBmasterk8s-master01值8C8G1024G

K8S:Pod容器中的存储方式及PV、PVC

文章目录Pod容器中的存储方式一.emptyDir存储卷1.emptyDir存储卷概念2.emptyDir存储卷示例二.hostPath存储卷1.hostPath存储卷概念2.hostPath存储卷示例三.nfs共享存储卷1.nfs共享存储卷示例四.PV和PVC1.PV、PVC概念2.PVC的使用逻辑及数据流向3.st

《Kubernetes部署篇:Ubuntu20.04基于containerd二进制部署K8S 1.25.14集群(多主多从)》

一、架构图如下图所示:二、部署说明2.1、部署流程1、系统环境初始化,主要包括主机名设置、主机hosts解析、关闭防火墙、关闭swap分区、修改系统参数、时间时区同步、修改内核参数、启用ipvs模式。2、使用一键生成K8S集群证书工具创建证书文件。3、二进制安装etcd集群。4、二进制安装Nginx+keepalive

Kubernetes 部署RocketMQ高可用集群

Kubernetes部署RocketMQ高可用集群导言RocketMQ常用的部署模式如下单Master模式多Master多Slave-异步复制模式离线镜像制作1.安装Go1.162.制作RocketMQOperatorImage获取RocketMQOperator制作RocketMQOperatorImage3.制作R

R语言贝叶斯广义线性混合(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据...

全文下载链接:http://tecdat.cn/?p=24203本教程使用R介绍了具有非信息先验的贝叶斯GLM(广义线性模型)(点击文末“阅读原文”获取完整代码数据)。当前教程特别关注贝叶斯逻辑回归在二元结果和计数/比例结果场景中的使用,以及模型评估的相应方法。使用教育数据示例。此外,本教程简要演示了贝叶斯GLM模型的

特网科技弹性云服务SSD云硬盘

引言:弹性云服务器是一种基于云计算技术的灵活可扩展的虚拟服务器。它可以根据业务需求来灵活调整服务器的配置,提供更高的可用性和性能。而在弹性云服务器中,云硬盘是一种非常重要的存储设备,它可以提供持久化的数据存储,并且支持多种类型的云硬盘。本文将介绍弹性云服务器使用的云硬盘类型,包括SSD云硬盘、高效云硬盘和普通云硬盘,并

润和软件HopeStage与华宇信息TAS应用中间件完成产品兼容性互认证

近日,江苏润和软件股份有限公司(以下简称“润和软件”)HopeStage操作系统与北京华宇信息技术有限公司(以下简称“华宇信息”)TAS应用中间件软件完成产品兼容性测试。测试结果表明,企业级通用操作系统HopeStageV1.0产品与TAS应用中间件软件产品可以顺利适配、相互良好兼容、稳定运行。这标志着润和软件Hope

小程序中如何查看会员卡的注册时间

会员系统是小程序中非常重要的一部分,可以帮助企业更好地管理客户,并提供更好的服务。在实际应用中,我们经常需要查看会员的注册时间,以便更好地了解客户的行为和需求。本文将介绍小程序如何查看会员的注册时间。1.找到指定的会员卡。在管理员后台->会员管理处,找到需要查看注册时间的会员卡。也支持对会员卡按卡号、手机号和等级进行搜

热文推荐