日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

面試過程中常見的排序算法問題你見個?附常見排序算法源代碼

來源: 責編: 時間:2023-12-04 09:20:46 265觀看
導讀在面試過程中,排序算法常常是一個重要的考點。排序算法的熟練掌握不僅能展現出候選人對基本數據結構的理解,也能展示出他們的算法設計和問題解決能力。下面我們將詳細討論幾種常見的排序算法及其在面試中的應用。一、選

IIr28資訊網——每日最新資訊28at.com

在面試過程中,排序算法常常是一個重要的考點。排序算法的熟練掌握不僅能展現出候選人對基本數據結構的理解,也能展示出他們的算法設計和問題解決能力。下面我們將詳細討論幾種常見的排序算法及其在面試中的應用。IIr28資訊網——每日最新資訊28at.com

一、選擇排序(Selection Sort)

選擇排序是一種簡單直觀的排序算法,它的工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。IIr28資訊網——每日最新資訊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)

冒泡排序的工作原理是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣每一輪過后最小(或最大)的元素會被移到序列的最后。IIr28資訊網——每日最新資訊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)

插入排序的工作原理是通過構建有序序列,對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入。IIr28資訊網——每日最新資訊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)

快速排序是一種分治的排序算法,它將原始數據分割成兩個或更多的子序列,然后對每個子序列進行排序,最后將有序的子序列合并為整體有序序列。IIr28資訊網——每日最新資訊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)

歸并排序也是一種分治的排序算法,它將原始數據分割成兩個或更多的子序列,然后對每個子序列進行排序,最后將有序的子序列合并為整體有序序列。但是,歸并排序采用了分治與合并相互獨立的方式進行設計。在每一步的處理上,歸并排序將序列分為兩部分進行獨立的排序,然后合并成一個有序的序列。這種設計方式使得歸并排序在處理大數據量的情況下表現得更好。IIr28資訊網——每日最新資訊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++;        }    }}

使用方法:IIr28資訊網——每日最新資訊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 + " ");    }}

這個程序會對數組進行歸并排序,排序后的數組會打印出來。注意,這是一個基本的歸并排序實現,它可能不適用于所有可能的輸入。如果你有特定的排序需求或大型數據集,可能需要優化該算法或使用其他算法。IIr28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-37257-0.html面試過程中常見的排序算法問題你見個?附常見排序算法源代碼

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 純CSS實現炫酷背景霓虹燈文字效果

下一篇: DDD架構下的防御式編程:5大關卡共同保障業務數據的有效性

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 6月iOS設備性能榜:M2穩居榜首 A系列只能等一手3nm來救

    沒有新品發布,自然iOS設備性能榜的上榜設備就沒有什么更替,僅僅只有跑分變化而產生的排名變動,畢竟蘋果新品的發布節奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產品也出現了歷史低價,那么各個價位段的產品性價比
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 把LangChain跑起來的三個方法

    使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
Top 主站蜘蛛池模板: 平乐县| 闻喜县| 克拉玛依市| 集贤县| 楚雄市| 黄龙县| 镇沅| 海原县| 广元市| 松滋市| 板桥市| 宣城市| 华池县| 温州市| 双流县| 镇巴县| 阿合奇县| 闽侯县| 五寨县| 鸡西市| 南汇区| 德兴市| 永川市| 清涧县| 黄冈市| 汝阳县| 厦门市| 漯河市| 苏州市| 西藏| 南安市| 扎囊县| 兴国县| 棋牌| 化州市| 中超| 宜丰县| 延津县| 札达县| 贵德县| 澳门|