面试算法题—编程题2023

这篇具有很好参考价值的文章主要介绍了面试算法题—编程题2023。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、冒泡排序

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

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

用动态可视化图更好的去理解冒泡排序
面试算法题—编程题2023,排序算法,面试,算法
java代码实现

 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;
                        }
                    }
                }
            }
    }

二、选择排序

1、 什么是选择排序?
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

2、选择排序原理是什么?
如下图,该图是选择排序的效果动图
面试算法题—编程题2023,排序算法,面试,算法
java代码实现

class demo2 {
    public static void main(String[] args) {
        int[] arr = {26, 1, 80, 27, 133};
        int temp = 0;
        // for循环嵌套实现
        for (int j=0;j<arr.length-1;j++){
            for (int i=1+j;i<arr.length;i++){
                if(arr[i]<arr[j]){
                    temp=arr[j];
                    arr[j]=arr[i];
                    arr[i]=temp;
                }
            }
        }
        //实现遍历
        System.out.print("[");
        for (int x = 0; x < arr.length; x++) {
            if (x == arr.length - 1) {
                System.out.println(arr[x] + "]");
            } else {
                System.out.print(arr[x] + ",");
            }
        }
    }

}
//结果
//[1,26,27,80,133]

三、快速排序

快速排序,顾名思义,是一种速度快,效率高的排序算法。
面试算法题—编程题2023,排序算法,面试,算法
java代码实现

class demo3 {

     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);//递归的处理当前两个游标位置的左边无序数组
     }

}

四、其它排序

其它排序详情点击传送门

如果对你有帮助,可以点个小心心 你的鼓励是我创作的动力!文章来源地址https://www.toymoban.com/news/detail-551468.html

到了这里,关于面试算法题—编程题2023的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java面试题】Java基础——排序算法

    冒泡排序★★★ 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。 它重复的遍历过要排序的数列, 一次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来 。 这个算法的名字由来是因为越大的元素会经由交换慢慢\\\"浮\\\"到最后面。 当然,大家可以按照从大到小的

    2024年02月12日
    浏览(34)
  • 2023Java高频必背并发编程面试题02

    CAS 算法是 基于值来做⽐较的 ,如果当前有两个线程,⼀个线程将变量值从 A 改为 B ,再由 B 改回为 A,当前线程开始执⾏ CAS 算法时,就很容易认为值没有变化,误认为读取数据到执⾏ CAS 算法的期间,没有线程修改过数据。 juc 包提供了⼀个 AtomicStampedReference,即 在原始的

    2023年04月09日
    浏览(62)
  • 算法面试-深度学习基础面试题整理-AIGC相关(2023.9.01)

    1、stable diffusion和GAN哪个好?为什么 ? Stable diffusion是一种基于随机微分方程的生成方法,它通过逐步增加噪声来扰动原始图像,直到完全随机化。然后,它通过逐步减少噪声来恢复图像,同时使用一个神经网络来预测下一步的噪声分布。Stable Diffusion的优点是可以在连续的潜

    2024年02月09日
    浏览(41)
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之010 week02 01-01 最简单的排序算法-选择排序法的设计思想

    接下类,我们学习另外一类非常基础的算法,即排序算法。 排序算法是计算机科学领域研究的非常深入的一类算法,排序这个动作本身也是非常重要的, 很多时候面对无需的数据,首先需要做的就是对他们进行排序。 排序算法——目的:让数据有序。 排序算法——种类:种

    2023年04月21日
    浏览(58)
  • 2023JAVA 架构师面试 130 题含答案:JVM+spring+ 分布式 + 并发编程》...

    此文包含 Java 面试的各个方面,史上最全,苦心整理最全 Java 面试题目整理包括基+JVM+算法+数据库优化+算法数据结构+分布式+并发编程+缓存等,使用层面广,知识量大,涉及你的知识盲点。要想在面试者中出类拔萃就要比人付出更多的努力,共勉! java 高频面试题如下: j

    2024年02月15日
    浏览(44)
  • 算法面试-深度学习基础面试题整理-AIGC相关(2023.9.01开始,持续更新...)

    1、stable diffusion和GAN哪个好?为什么 ? Stable diffusion是一种基于随机微分方程的生成方法,它通过逐步增加噪声来扰动原始图像,直到完全随机化。然后,它通过逐步减少噪声来恢复图像,同时使用一个神经网络来预测下一步的噪声分布。Stable Diffusion的优点是可以在连续的潜

    2024年02月10日
    浏览(48)
  • 【排序算法略解】(十种排序的稳定性,时间复杂度以及实现思想)(含代码)(完工于2023.8.3)

    注:以下排序默认为升序排序。 稳定性:指的是排序的过程中是否会改变多个相同的值的相对次序,如果会改变则是不稳定的。 冒泡排序,选择排序,插入排序是最简单的排序方法。 排序方法:扫描的过程中,比较相邻两个数的大小关系,如果存在逆序就交换这两个数,这

    2024年02月13日
    浏览(53)
  • 【面试准备 算法题】用快排的思路对单链表进行排序(不能进行值拷贝)

    最近面试碰到这个题目感觉很有意思,既考察二分/递归的思想,也考察链表的操作,尤其对于边界情况的处理需要细心 给定单链表进行排序(链表节点定义如上) 不能通过值拷贝来实现元素交换(必须通过修改next指针实现 元素位置排序 )

    2024年02月13日
    浏览(37)
  • 2023面试到底有多难?大厂为何都注重算法?我们该如何应对?

    文章的开头大家先来看一看一道字节的算法题,看是否能做出来: 给定一个单链表的头节点 head,实现一个调整单链表的函数,使得每K个节点之间为一组进行逆序,并且从链表的尾部开始组起,头部剩余节点数量不够一组的不需要逆序。(不能使用队列或者栈作为辅助) 大家

    2023年04月14日
    浏览(89)
  • 2023“钉耙编程”中国大学生算法设计超级联赛(4)

    分别从k个集合中选一个元素组成一个数组 ((a_1, a_2, a_3,..., a_k)) ,求max ((a_1, a_2, a_3,..., a_k)) - min ((a_1, a_2, a_3,..., a_k)) 的最小值。 我们给每个集合中的元素添加一个id标识它属于哪个集合,然后将所有集合合并并按数值大小从小到大排序,这样问题就转化成:找一个最小区

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包