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

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

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

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

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

一、选择排序(Selection Sort)

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为宣布HarmonyOS4.0将于8月4日正式发布。此前,华为已经针对开发者公布了HarmonyOS4.0,以便于开发者提前进行适配,也因此被曝光出了一些新系统的特性
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
Top