常见排序算法—面试编程题2023

news2024/11/18 17:33:04

常见排序算法—面试编程题2023

最近在看一些面试题,发现很多面试过程中都会要求手写排序编程题,经过一番查找整理,可以快速学习和使用相关排序算法题,通俗易懂,手撕代码吊打面试官。

一、冒泡排序

冒泡排序 是一种简单的排序算法,它重复地遍历待排序的数组,每次比较相邻的两个元素,如果顺序不对就交换它们。通过多次遍历,最终将待排序的数组按照从小到大或从大到小的顺序排列好。

冒泡排序的原理和过程
冒泡排序的原理很简单,每次比较相邻两个元素,如果前面的元素大于后面的元素,就交换它们。通过多次比较,最大(或最小)的元素会“浮”到数组的末尾,因此称为冒泡排序

用动态可视化图更好的去理解冒泡排序
在这里插入图片描述

 public class demo1 {

            public static void main(String[] args) {
                int[] a ={5,4,3,2,1};
                sort(a);
                for (int i = 0; i < a.length; i++) {
                    System.out.print(a[i]);
                }
            }
            //冒泡排序
            //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,就交换
            //2.每一次比较都会产出一个最大或者最小的元素
            //3.下一轮少一次排序
            //4.依次循环,直到结束!
            public static  void sort(int[] array){
                //外层循环,判断程序要走多少次
                int temp;//临时变量
                for (int i = 0; i < array.length - 1; i++) {
                    //内层循环,比较两个数,如果第一个数比第二个数大,则交换
                    for (int j = 0; j < array.length-1-i; j++) {
                        if(array[j] > array[j+1]){
                            temp = array[j];
                            array[j] = array[j+1];
                            array[j+1] = temp;
                        }
                    }
                }
            }
    }

二、快速排序

快速排序,顾名思义,是一种速度快,效率高的排序算法。
在这里插入图片描述

class demo2 {

     public static void main(String[] args){
         int[] arr = {4,1,2,3,5,14,23,12,7,14};
         quickSort(arr,0,arr.length-1);
         System.out.println(Arrays.toString(arr));
     }
     public static void quickSort(int[] arr, int left, int right) {
         if(left >= right) {//终止条件,如果左边界下标等于有边界下标,或者大于右边界下标的时候,说明当前数组的长度已经是1乃至该数组物理上不存在了,因此就直接返回,终止递归,这里是递归出口。
             return ;
         }
         int i = left,j = right,base = arr[i];//根据传入的左右边界声明出两个游标,同时指定好基准数,我们命名为base
         while(i!=j) {//只要左右游标不相等,说明二者没有相遇,循环就会继续执行
             while(i<j && arr[j] >= base) {//j游标先行,只要j游标指向的数值大于基准数,j游标就开始游移,需要注意的是在j游标游移的过程中也会时刻注意到i和j游标是否相遇了,只要相遇就停止
                 j--;//j游标是往前走
             }
             while(i<j && arr[i] <= base) {//i游标后走,只要是i游标指向的数值小于基准数,i游标就开始游移,需要注意的是i游标在游移的过程中也会时刻注意到i和j游标是否相遇了,只要相遇就停止
                 i++;
             }
             int temp = arr[j];//在退出上边的外循环之后,说明二者均指向了需要被交换的元素,也就是说i指向了一个大于基准数的元素,j指向了一个小于基准数的元素,因此二者发生交换。如果此时两数不是因为这种指向情况而导致的交换,是由于相遇导致的交换,那么这个交换将没有意义
             arr[j] = arr[i];
             arr[i] = temp;
         }
         arr[left] = arr[i];//与基准数交换,此时我们已经找到了基准数的准确位置,我们将基准数与当前位置上的元素进行一次交换
         arr[i] = base;


         quickSort(arr, left, i-1);//递归的处理当前两个游标位置的右边无序数组
         quickSort(arr, i+1,right);//递归的处理当前两个游标位置的左边无序数组
     }

}

其它排序后续补上。。。。。。。

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

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

相关文章

ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法

ETHERNET/IP和ETHERCAT是两种不同的协议&#xff0c;它们在工业生产中都有广泛的应用。然而&#xff0c;由于协议不同&#xff0c;这两种设备之间无法通讯&#xff0c;这给工业生产带来了很大的麻烦。而远创智控YC-EIP-ECT网关应运而生&#xff0c;它能够连接到ETHERNET/IP总线…

路径规划算法:基于世界杯优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于世界杯优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于世界杯优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

合合信息AI图像内容安全新技术亮相WAIC2023,防范“生成式造假”

开年以来&#xff0c;多个图像生成软件在全球迅速蹿红&#xff0c;其作画逼真程度“技惊四座”。AI一路“狂飙”&#xff0c;让生成、篡改等多形式的图片伪造的门槛变得更低&#xff0c;由此引发的隐患也令人忧虑。 图像是信息的主要载体之一&#xff0c;利用AI进行图像造假的…

MachineLearningWu_4_GradientDescent

我们在上一个章节中学习了损失函数&#xff0c;我们的最终目的是要求得损失函数最小化的weight和bias&#xff0c;那么如何做到这一点呢&#xff0c;我们引入梯度下降算法&#xff0c; 请注意&#xff0c;对于Linear Regression MSE&#xff0c;你得到的J(w, b)和w, b的图必然…

AIGC - Stable Diffusion 多重控制网络 ControlNet (OpenPose + Depth) 配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131603523 Multi-ControlNet 是 Stable Diffusion 的一个功能&#xff0c;让用户用不同的空间条件来控制图像生成的过程。例如&#xff0c;可以用…

【高并发网络通信架构】2.引入多线程实现多客户端连接的tcp服务端

目录 一&#xff0c;往期文章 二&#xff0c;代码实现 一&#xff0c;往期文章 【高并发网络通信架构】1.Linux下实现单客户连接的tcp服务端 二&#xff0c;代码实现 关键代码 因为accept是阻塞等待客户端连接&#xff0c;当客户端连接成功后才会执行accept后面的代码&…

简介Maven结构与配置方法

一、Maven是什么 Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 它有什么用呢&#xff1f; 比如我以前要IOUtils这个包&#xff0c;那要到网站下去下载下来&#xff0c;再导入。 当jar包多的时候&#xff0c;一个一个导出&#xff0c;…

开源Cillium项目为容器提供强大的网络功能

试验性的开源Cillium项目使用Linux内核的一项现有特性&#xff0c;为容器提供高速、强大的网络功能。一项名为Cilium的开源项目试图基于Linux内核中所用的技术&#xff0c;为容器提供一种新的网络方法。 试验性的开源Cillium项目使用Linux内核的一项现有特性&#xff0c;为容器…

ARM中断实验

#ifndef __KEY_H__ #define __KEY_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//对RCC/GPIO/EXTI章节的初始化 void hal_key1_exti_init();//对GIC的初始…

算法笔记(Java)——链表篇

链表类问题通常比较简单&#xff0c;面试中应该不会出现这么简单的题型&#xff0c;需要注意的地方只有两个&#xff1a; 使用虚拟头节点增加便捷性判断链表是否有环 使用虚拟头节点 力扣题目链接&#xff1a; 203. 移除链表元素 这道题目比较简单&#xff0c;但是使用虚拟…

使用pyhton将文件夹内多个excel表格合并成总表

前言&#xff1a; 本文讲述使用python将需要处理的文件夹内多个excel文件内容进行合并&#xff0c;并输出为xlsx格式的总表。就比如一个文件夹里又有许多子文件夹&#xff0c;这些子文件夹里分布有excel文件&#xff0c;这里的python文件就能将这个文件夹内的所有excel文件进行…

【SpringMVC】| SpringMVC执行流程(含源码分析)

目录 SpringMVC执行流程 1. SpringMVC常用组件 2. DispatcherServlet初始化过程&#xff08;源码分析&#xff09; 3. DispatcherServlet调用组件处理请求 4. SpringMVC的完整执行流程 图书推荐&#xff1a;Spring Cloud Alibaba核心技术与实战案例 SpringMVC执行流程 1…

2.3.cuda驱动API-上下文管理设置及其作用

目录 前言1. CUcontext总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记 本次课程学习精简 CUDA 教程-Driver API 上下文管理设置及其作用 课…

css 中的几种颜色格式

css 中的几种颜色格式 css有一系列不同的颜色格式: 十六进制代码、RGB()、HSL()、lch()等等。 我们在使用的时候可能并不太注重这些。但是它们之前存在非常重要区别。本文会介绍不同的颜色格式及区别。 命名颜色 这并不是一种真正的颜色格式&#xff0c;但是对于初学者还是…

kube-proxy代理模式详解

kube-proxy代理模式详解 kube-proxy当前支持以下几种代理模式&#xff1a; 1、userspace&#xff1a;最早的负载均衡方案&#xff0c;它在用户空间监听一个端口&#xff0c;所有服务通过iptables转发到这个端口&#xff0c;然后在其内部负载均衡到实际的Pod。该方式最主要的问…

如何让大型语言模型(LLMs)遵守道德原则?

我们知道像ChatGPT那样的大型语言模型提供了内容审查机制&#xff0c;我们从openai的官方文档中可以看到open提供了Moderation的内容审查机制,主要包含以下11个方面&#xff1a; 从官方文档上看这11方面的审核机制似乎只停留在严格的法律层面的审查&#xff0c;但是对于那些没…

Java web开发--springboot

Java web开发--springboot Java有很多web框架 但是有的框架不是很好用:比如Java Servlets(个人感觉)不好调试,WEB-INF文件关联来关联去很烦躁,启动后 crtlc还关闭不了(我一般习惯用ctrlc命令来关闭服务).导致后面我调试springboot时一直报错,原来是Java Servlets的服务没关(我习…

Handshake failed due to invalid Upgrade header: null 解决方案以及连接60s,信息不交互,连接断开

Handshake failed due to invalid Upgrade header: null 解决方案以及连接60s&#xff0c;信息不交互&#xff0c;连接断开 1. 问题背景&#xff1a;因为后端用了nginx代理&#xff0c;所以websocket连接的过程中报错&#xff1a;Handshake failed due to invalid Upgrade hea…

[MySQL]数据类型(图文详解)

[MySQL]数据类型 文章目录 [MySQL]数据类型1. 数据类型分类2. 数值类型2.1 bit类型2.2 tinyint类型2.3 float类型2.4 decimal类型2.5 char类型2.6 varchar类型2.7 日期和时间类型2.8 enum和set类型 1. 数据类型分类 2. 数值类型 说明&#xff1a; 数值类型在定义时不加unsign…

【雕爷学编程】Arduino动手做(154)---AFMotor电机扩展板模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…