当前位置:首页 > 科技  > 软件

面试过程中常见的排序算法问题你见个?附常见排序算法源代码

来源: 责编: 时间:2023-12-04 09:20:46 406观看
导读在面试过程中,排序算法常常是一个重要的考点。排序算法的熟练掌握不仅能展现出候选人对基本数据结构的理解,也能展示出他们的算法设计和问题解决能力。下面我们将详细讨论几种常见的排序算法及其在面试中的应用。一、选

Klh28资讯网——每日最新资讯28at.com

在面试过程中,排序算法常常是一个重要的考点。排序算法的熟练掌握不仅能展现出候选人对基本数据结构的理解,也能展示出他们的算法设计和问题解决能力。下面我们将详细讨论几种常见的排序算法及其在面试中的应用。Klh28资讯网——每日最新资讯28at.com

一、选择排序(Selection Sort)

选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。Klh28资讯网——每日最新资讯28at.com

Java源代码示例

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

二、冒泡排序(Bubble Sort)

冒泡排序的工作原理是,对相邻的元素进行两两比较,顺序相反则进行交换,这样每一轮过后最小(或最大)的元素会被移到序列的最后。Klh28资讯网——每日最新资讯28at.com

Java源代码示例

public static void bubbleSort(int[] arr) {    int n = arr.length;    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;            }        }    }}

三、插入排序(Insertion Sort)

插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。Klh28资讯网——每日最新资讯28at.com

Java源代码示例

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;        while (j >= 0 && arr[j] > key) {            arr[j + 1] = arr[j];            j = j - 1;        }        arr[j + 1] = key;    }}

四、快速排序(Quick Sort)

快速排序是一种分治的排序算法,它将原始数据分割成两个或更多的子序列,然后对每个子序列进行排序,最后将有序的子序列合并为整体有序序列。Klh28资讯网——每日最新资讯28at.com

Java源代码示例

public static void quickSort(int[] arr, int low, int high) {    if (low < high) {        int pi = partition(arr, low, high);        quickSort(arr, low, pi - 1);        quickSort(arr, pi + 1, high);    }}public static int partition(int[] arr, int low, int high) {    int pivot = arr[high];     int i = (low - 1);     for (int j = low; j < high; j++) {        if (arr[j] < pivot) {            i++;            int temp = arr[i];            arr[i] = arr[j];            arr[j] = temp;        }    }    int temp = arr[i + 1];    arr[i + 1] = arr[high];    arr[high] = temp;    return i + 1;}

五、归并排序(Merge Sort)

归并排序也是一种分治的排序算法,它将原始数据分割成两个或更多的子序列,然后对每个子序列进行排序,最后将有序的子序列合并为整体有序序列。但是,归并排序采用了分治与合并相互独立的方式进行设计。在每一步的处理上,归并排序将序列分为两部分进行独立的排序,然后合并成一个有序的序列。这种设计方式使得归并排序在处理大数据量的情况下表现得更好。Klh28资讯网——每日最新资讯28at.com

public class MergeSort {    public static void mergeSort(int[] arr) {        if (arr == null || arr.length < 2) {            return;        }        sortProcess(arr, 0, arr.length - 1);    }    public static int[] getSubArray(int[] arr, int l, int r) {        int[] subArr = new int[r - l + 1];        for (int i = 0; i < subArr.length; i++) {            subArr[i] = arr[l + i];        }        return subArr;    }    public static void sortProcess(int[] arr, int l, int r) {        if (l < r) {            int m = (l + r) / 2;            sortProcess(arr, l, m);            sortProcess(arr, m + 1, r);            merge(arr, l, m, r);        }    }    public static void merge(int[] arr, int l, int m, int r) {        int[] leftArr = getSubArray(arr, l, m);        int[] rightArr = getSubArray(arr, m + 1, r);        int left = 0;        int right = 0;        int index = l;        while (left < leftArr.length && right < rightArr.length) {            if (leftArr[left] <= rightArr[right]) {                arr[index] = leftArr[left];                left++;            } else {                arr[index] = rightArr[right];                right++;            }            index++;        }        while (left < leftArr.length) {            arr[index] = leftArr[left];            left++;            index++;        }        while (right < rightArr.length) {            arr[index] = rightArr[right];            right++;            index++;        }    }}

使用方法:Klh28资讯网——每日最新资讯28at.com

public static void main(String[] args) {    int[] arr = {5, 3, 2, 6, 8, 1};    MergeSort mergeSort = new MergeSort();    mergeSort.mergeSort(arr);    for (int i : arr) {        System.out.print(i + " ");    }}

这个程序会对数组进行归并排序,排序后的数组会打印出来。注意,这是一个基本的归并排序实现,它可能不适用于所有可能的输入。如果你有特定的排序需求或大型数据集,可能需要优化该算法或使用其他算法。Klh28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-37257-0.html面试过程中常见的排序算法问题你见个?附常见排序算法源代码

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 纯CSS实现炫酷背景霓虹灯文字效果

下一篇: DDD架构下的防御式编程:5大关卡共同保障业务数据的有效性

标签:
  • 热门焦点
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
Top