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

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

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

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

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

一、选择排序(Selection Sort)

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top