1.3 排序算法

在这里插入图片描述
在这里插入图片描述

1.1 冒泡排序

public class BubbleSort {
    public static void main(String[] args) {

        int[] arr = {133,322,13,444,54,621,174,18,19,2};
        System.out.println(Arrays.toString(arr));
        BubSort(arr);
        System.out.println(Arrays.toString(arr));
    }
    //冒泡排序
    public static void BubSort(int[] arr){
        //临时变量,存储较大元素
        int temp;
        //控制比较多少轮
        for(int i=0;i<arr.length;i++)
        {
            //控制比较次数
            for(int j=0;j<arr.length-1-i;j++)
            {
                if(arr[j]>arr[j+1]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
}

1.2 快速排序

    //快速排序
    public static void QuiSort(int[] arr,int start,int end) {
        if (start < end) {
            //找到数组的标准数
            int stard = arr[start];
            //记录排序的下标
            int low = start;
            int high = end;
            while (low < high) {
                //如果右边数字大于标准数
                while (low < high && stard <= arr[high]) {
                    high--;
                }
                //如果右边数字小于标准数,需要替换左边的数字
                arr[low] = arr[high];
                //如果左边数字小于标准数字
                while (low < high && arr[low] <= stard) {
                    low++;
                }
                //如果右边数字大于标准数,需要替换右边的数字
                arr[high] = arr[low];
            }
            //标准数赋值
            arr[low] = stard;
            //System.out.println("第一次排序"+Arrays.toString(arr));
            //第一次已经排好,使用递归分开处理
            //处理所有小的数字
            QuiSort(arr, start, low);
            //处理所有大的数字
            QuiSort(arr, low+1, end);
        }
    }
}

1.3 插入排序

 public  static void insertSort(int [] arr){
        //遍历所有数字:从后往前比较
        // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
        for(int i=1;i<arr.length;i++)
        {
            if(arr[i]<arr[i-1]){
                int temp=arr[i];
                int j;
                //遍历当前数字前面所有数字,如果前面数字大于后面数字temp,交换
                for(j=i-1;j>=0&&temp<arr[j];j--){
                    //把前一个数字赋给后一个数字
                    arr[j+1]=arr[j];
                    //方法二:
                    //arr[j]=temp;
                }
                //当比较到不小于temp的值:临时变量(外层for循环的当前元素)赋给不符合条件的后一个位置pos
                //方法一:
               arr[j+1]=temp;
            }
        }
    }

1.4 希尔排序

 public static void shellSort(int[] arr) {
        int k=1;
        //遍历所有步长
        for (int d = arr.length / 2; d > 0; d /= 2) {
            //遍历所有元素
            for (int i = d; i < arr.length; i++) {
                for (int j = i - d; j >= 0; j -= d) {  //比较的元素是j=j-d; 1 3 5 7
                    //如果当前元素大于加上步长的元素(从小到大)
                    if (arr[j] > arr[j + d]) {
                        //交换元素
                        int temp = arr[j];
                        arr[j] = arr[j + d];
                        arr[j + d] = temp;
                    }
                }
            }
            System.out.println("第" + k + "次排序后的数组" + Arrays.toString(arr));
            k++;
        }
    }

1.5 选择排序

   //选择排序
    public static void selectSort(int[]arr){
        //遍历所有数字
        for(int i=0;i<arr.length;i++){
            int minIndex=i;
            //当前遍历的数和后面的数字依次比较,记录最小数字的下标
            //寻找最小的元素下标
            for(int j=i+1;j<arr.length;j++){
                //如果后面比较的数比记录的最小数小
                if(arr[minIndex]>arr[j]){
                    //记录最小数的下标
                    minIndex=j;
                }
            }
            //如果最小的数和当前遍历数的下标不一样,说明后面下标为minIndex的数比当前遍历的数更小
            //交换数字
            if(i!=minIndex){
                int temp=arr[i];
                arr[i]=arr[minIndex];
                arr[minIndex]=temp;
            }
        }
    }

1.6 归并排序

public class MergeSort {
    public static void main(String[] args) {
        int[]arr=new int[]{1111,112,4,55,555,111,244,145};
        int mid=arr.length/2;
        mergeSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    //归并排序:递归和合并
   public static  void mergeSort(int[] arr,int left,int right) {
        int mid=(left+right)/2;
        if(left<right){
            //处理左边
            mergeSort(arr,left,mid);
            //处理右边
            mergeSort(arr,mid+1,right);
            //归并操作:
            merge(arr,left,mid,right);
        }
    }

    //合并的方法:
    // a数组的的第i个 和b数组的第j个比较。 小的先进入
    public static void merge(int[] arr,int left,int mid,int right) {
        //用于存储归并后的临时数组
        int []temp=new int[right-left+1];
        //模拟分成两个数组:
        // 记录第一个数组中需要遍历的下标,[left,mid]
        int i=left;
        //记录第二个数组中遍历的下标   ,[mid+1,right]
        int j=mid+1;
        //用于记录临时数组中存放下标
        int index=0;
        //遍历两个数组
        while(i<=mid&&j<=right){
            //第一个数组的数据更小
            if(arr[i]<arr[j]){
                //放入小数据到临时数组中
                temp[index]=arr[i];
                i++;
            }else{
                temp[index]=arr[j];
                j++;
            }
            //放入元素后,index后移动
            index++;
        }

        //处理多余数据:a数组或者b数组中剩下元素的情况
        while(j<=right){
            temp[index]=arr[j];
            j++;
            index++;
        }
       //将数组arr中从索引为l到索引为mid的元素复制到临时数组temp中
        while (i<=mid){
            temp[index]=arr[i];
            i++;
            index++;
        }
        //临时数组中的数据重新存入原数组
        for(int k=0;k<temp.length;k++) {
            //从pos=low开始放入排序后的元素
            arr[left+k]=temp[k];
        }
    }
}

1.7 堆排序

先把数组中元素变为大顶堆(根节点大于子节点),再对大顶堆进行排序(取出大顶堆中的最上面元素,再对下面进行调整;对调整好的大顶堆再取出最上面的元素,一直重复)。

//堆排序:升序使用大顶堆
//降序使用小顶堆
//先把数组中元素变为大顶堆(根节点大于子节点),再对大顶堆进行排序


import java.util.Arrays;
import java.util.HashMap;

public class HeapSort {
    public static void main(String[] args) {
        int[]arr=new int[]{9,6,8,7,0,1,10,4,2};
        heapSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    //对调整好的大顶堆进行排序: 
    // 取出大顶堆中的最上面元素,再对下面进行调整;对调整好的大顶堆再取出最上面的元素,一直重复
    public static void heapSort(int []arr){
        //开始位置是最后一个非叶子节点,即最后一个节点的父节点
        int start=(arr.length-1)/2;
        //结束为止,数据长度-1
        //从最后一个非叶子节点从后往前进行调整
        for(int i=start;i>=0;i--){
            maxHeap(arr,arr.length,i);
        }
        //先把数组中的第0个和堆中的最后一个数字交换位置,再把前面的处理为大顶堆
        for(int i=arr.length-1;i>0;i--){
            int temp=arr[0];
            arr[0]=arr[i];
            arr[i]=temp;
            maxHeap(arr,i,0);
        }

    }


    //(1)大顶堆
    public static void maxHeap(int []arr,int size,int index){
        // 找到左孩子节点
        int lNode=2*index+1;
        //找到右孩子节点
        int rNode=2*index+2;
        int max=index;
        //和两个子节点分别对比,找出最大的节点
        if(lNode<size&&arr[lNode]>arr[max]){
            max=lNode;
        }
        if(rNode<size&&arr[rNode]>arr[max]){
            max=rNode;
        }
        //交换位置
        if(max!=index){
            int temp=arr[index];
            arr[index]=arr[max];
            arr[max]=temp;
            //交换位置后,对交换后的堆进行调整
            maxHeap(arr, size,max);
        }
    }

}

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

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

相关文章

详解API开发【电商平台API封装商品详情SKU数据接口开发】

1、电商API开发 RESTful API的设计 RESTful API是一种通过HTTP协议发送和接收数据的API设计风格。它基于一些简单的原则&#xff0c;如使用HTTP动词来操作资源、使用URI来标识资源、使用HTTP状态码来表示操作结果等等。在本文中&#xff0c;我们将探讨如何设计一个符合RESTfu…

J2EE征程——第一个纯servletCURD

第一个纯servletCURD 前言在此之前 一&#xff0c;概述二、CURD1介绍2查询并列表显示准备实体类country编写 CountryListServlet配置web.xml为web应用导入mysql-jdbc的jar包 3增加准备增加的页面addc.html编写 CAddServlet配置web.xml测试 4删除修改CountryListServlet&#xf…

autojs-ui悬浮按钮模板

注释很详细&#xff0c;直接上代码 涵盖很多常用知识点&#xff0c;也可当知识点看 运行效果长这样&#xff1a; 开始按钮相当于开关&#xff0c;按钮内容会随点击变换控制台按钮可让运行框显示或隐藏退出按钮退出程序并在3s后关闭运行框只需在对应函数内添加需要实现的内容即可…

谈一谈大小端

文章目录 一&#xff0c;什么是大小端二&#xff0c;为什么有大小端三&#xff0c;怎么验证大小端 一&#xff0c;什么是大小端 大端存储模式&#xff1a;是指数据的地位存储在高地址处&#xff0c;数据的高位存储在低地址处。 小端存储模式&#xff1a;是指数据的低位存储在低…

设计规则:模块化的力量

这是一本比较冷门的书**《设计规则&#xff1a;模块化的力量》**&#xff0c;虽然豆瓣上只有58个评价&#xff0c;但是确实能学到很多东西。 这本书对我非常深远。不是是投资&#xff0c;创业&#xff0c;还是其他领域&#xff0c;模块化思想都能帮上你。这本书告诉我们生万物…

边界突破之linux系统上线Cobalt Strike

别低头&#xff0c;皇冠会掉&#xff1b;别流泪&#xff0c;坏人会笑 基础文件 加载插件 服务端开启监听 windows/beacon_https/reverse_https 类型的beacon 生成木马Beacon 命令如下 linux ./genCrossC2.Linux [TeamServer的IP] [HTTPS监听器端口] [.cobaltstrike.beacon_k…

单片机_RTOS_架构

一. RTOS的概念 // 经典单片机程序 void main() {while (1){喂一口饭();回一个信息();} } ------------------------------------------------------ // RTOS程序 喂饭() {while (1){喂一口饭();} }回信息() {while (1){回一个信息();} }void main() {create_task(喂饭);cr…

【古月居《ros入门21讲》学习笔记】17_launch启动文件的使用方法

目录 说明&#xff1a; 1. launch文件作用 2. launch文件语法 根元素 参数设置 重映射、嵌套 3. 示例 创建功能包 1_simple.launch 编译 运行 2_turtlesim_parameter_config.launch 启动运行 启动运行显示说明 3_start_tf_demo_c.launch 启动运行 4_start_tf_d…

Python语言学习笔记之五(Python代码注解)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 注解与注释是不一样的&#xff0c;注解有更广泛的应用&#xff1b; 通过注解与注释都能提高代码的可读性和规…

CSS3样式详解之圆角、阴影及变形

目录 前言一、圆角样式&#xff08;border-radius&#xff09;二、元素阴影&#xff08;box-shadow&#xff09;三、过渡动画样式&#xff08;transition&#xff09;1. transition-property(用于设置属性名称)2. transition-duration&#xff08;设置时间&#xff09;3. trans…

什么是requestIdleCallback?和requestAnimationFrame有什么区别?

什么是requestIdleCallback? 我们都知道React 16实现了新的调度策略(Fiber), 新的调度策略提到的异步、可中断&#xff0c;其实就是基于浏览器的 requestIdleCallback和requestAnimationFrame两个API。 在 JavaScript 中&#xff0c;requestIdleCallback 是一个用于执行回调函…

linux安装docker(脚本一键安装配置docker)

1、创建脚本 vi initDocker.sh #安装前先更新yum&#xff0c;防止连接镜像失败 yum -y update#卸载系统之前的docker&#xff08;可选择&#xff0c;我这里直接注释了&#xff09; #yum remove docker docker-client docker-client-latest docker-common docker-latest docke…

C#,数值计算——插值和外推,径向基函数插值(RBF_multiquadric)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class RBF_multiquadric : RBF_fn { private double r02 { get; set; } public RBF_multiquadric(double scale 1.0) { this.r02 Globals.SQR(scale); } publi…

PHP微信UI在线聊天系统源码 客服私有即时通讯系统 附安装教程

DuckChat是一套完整的私有即时通讯解决方案&#xff0c;包含服务器端程序和各种客户端程序&#xff08;包括iOS、Android、PC等&#xff09;。通过DuckChat&#xff0c;站点管理员可以快速在自己的服务器上建立私有的即时通讯服务&#xff0c;用户可以使用客户端连接至此服务器…

linux无网络 无ip,显示网络未连接

标题:linux无网络 无ip&#xff0c;显示网络未连接 参考blog&#xff1a;Linux无网络连接问题排查 首先我们发现ens33没有ip地址&#xff0c;说明这个接口并没有被分到ip&#xff1b; 我们可以通过手动方式来给ens33获得网络ip sudo dhclient ens33&#xff0c;之后再输入ifc…

视图层、模板(补充)

视图层 响应对象 响应---》本质都是 HttpResponse HttpResponse---》字符串render----》放个模板---》模板渲染是在后端完成 js代码是在客户端浏览器里执行的模板语法是在后端执行的redirect----》重定向 字符串参数不是是空的状态码是 3开头JsonResponse---》json格式数据 …

HTML-CSS知识速查

HTML/CSS知识速查 文章目录 HTML/CSS知识速查[toc]网页的组成浏览器**为什么需要Web标准&#xff1a;** **web标准的构成&#xff1a;**HTMLHTML语法导读**1.1 HTML语法规则&#xff1a;**1.2 基本结构标签**1.3 标签的关系&#xff1a;**1. **包含关系&#xff08;Parent-Chil…

【洛谷算法题】P5716-月份天数【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5716-月份天数【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格式&a…

Swift 常用关键字

目录 一、数据类型 1. 流程控制 2. 访问控制 3. 功能修饰词 4. 错误处理 5. 泛型和类型 6. 其它关键字 二、部分关键字说明 1. guard 2. class 和 struct struct&#xff08;结构体&#xff09; class&#xff08;类&#xff09; 使用场景 3. mutating 4. proto…

java开发之基于个微群聊二次开发

请求URL&#xff1a; http://域名地址/getGroupQrCode 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是String登录实例标识chatRoomI…