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

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

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

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

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

一、选择排序(Selection Sort)

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

冒泡排序的工作原理是,对相邻的元素进行两两比较,顺序相反则进行交换,这样每一轮过后最小(或最大)的元素会被移到序列的最后。KQN28资讯网——每日最新资讯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)

插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。KQN28资讯网——每日最新资讯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)

快速排序是一种分治的排序算法,它将原始数据分割成两个或更多的子序列,然后对每个子序列进行排序,最后将有序的子序列合并为整体有序序列。KQN28资讯网——每日最新资讯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)

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

使用方法:KQN28资讯网——每日最新资讯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 + " ");    }}

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

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

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

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

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

标签:
  • 热门焦点
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的&ldquo;新电商三兄弟&rdquo;成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾&ldquo;低价&rdquo;口号。而过去与他们错位竞争的拼多多,靠
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 信通院:小米、华为等11家应用商店基本完成APP签名及验签工作

    中国信通院表示,目前,小米、华为、OPPO、vivo、360手机助手、百度手机助手、应用宝、豌豆荚和努比亚等9家应用商店,以及抖音和快手2家新型应用分发平
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
Top