欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Java排序算法

 更新時(shí)間:2024年04月02日 09:46:47   作者:旅人OranGe  
本文主要介紹了深入了解Java排序算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概述

排序算法是計(jì)算機(jī)科學(xué)中的基本問題,也是數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)的重要部分。在Java中,我們可以使用各種排序算法來排列數(shù)組或列表中的元素。以下是幾個(gè)常見的排序算法及其基本思想的介紹:

排序算法介紹

1. 冒泡排序(Bubble Sort)

基本思想:通過相鄰元素之間的比較和交換,使得每一趟排序后,最大(或最?。┑脑啬軌?ldquo;浮”到數(shù)列的一端。

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]) {  
                // 交換 arr[j] 和 arr[j + 1]  
                int temp = arr[j];  
                arr[j] = arr[j + 1];  
                arr[j + 1] = temp;  
            }  
        }  
    }  
}

2. 選擇排序(Selection Sort)

基本思想:每一趟從待排序的元素中選出最小(或最大)的一個(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。

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;  
            }  
        }  
        // 交換 arr[i] 和 arr[minIndex]  
        int temp = arr[i];  
        arr[i] = arr[minIndex];  
        arr[minIndex] = temp;  
    }  
}

3. 插入排序(Insertion Sort)

基本思想:將待排序的元素按其大小逐個(gè)插入到已經(jīng)排序的序列中的適當(dāng)位置,直到全部插入完畢。

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

4. 歸并排序(Merge Sort)

基本思想:采用分治法的一個(gè)非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。

Java示例:

public static void mergeSort(int[] arr) {  
    if (arr.length < 2) {  
        return;  
    }  
    int mid = arr.length / 2;  
    int[] left = Arrays.copyOfRange(arr, 0, mid);  
    int[] right = Arrays.copyOfRange(arr, mid, arr.length);  
    mergeSort(left);  
    mergeSort(right);  
    merge(arr, left, right);  
}  
  
private static void merge(int[] arr, int[] left, int[] right) {  
    int i = 0, j = 0, k = 0;  
    while (i < left.length && j < right.length) {  
        if (left[i] <= right[j]) {  
            arr[k++] = left[i++];  
        } else {  
            arr[k++] = right[j++];  
        }  
    }  
    while (i < left.length) {  
        arr[k++] = left[i++];  
    }  
    while (j < right.length) {  
        arr[k++] = right[j++];  
    }  
}

5. 快速排序(Quick Sort)

基本思想:通過一次排序?qū)⒋判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。

Java示例:

public static void quickSort(int[] arr, int low, int high) {  
    if (low < high) {  
        int pivotIndex = partition(arr, low, high);  
        quickSort(arr, low, pivotIndex - 1);  
        quickSort(arr, pivotIndex + 1, high);  
    }  
}  
  
private 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++;  
            // 交換 arr[i] 和 arr[j]  
            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;  
}  
  
// 調(diào)用快速排序的方法  
public static void quickSort(int[] arr) {  
    quickSort(arr, 0, arr.length - 1);  
}

總結(jié)

每種排序算法都有其優(yōu)點(diǎn)和缺點(diǎn)。例如,冒泡排序和插入排序在小型數(shù)組或幾乎有序的數(shù)組上表現(xiàn)良好,但它們的性能在大型數(shù)組上較差。選擇排序在小型數(shù)組上表現(xiàn)良好,但在大型數(shù)組上效率較低。歸并排序和快速排序在大型數(shù)組上表現(xiàn)良好,但歸并排序需要額外的空間來合并子數(shù)組,而快速排序在某些情況下可能會(huì)遇到最壞情況的時(shí)間復(fù)雜度。因此,在選擇排序算法時(shí),需要根據(jù)具體情況和需求進(jìn)行權(quán)衡。

到此這篇關(guān)于深入了解Java排序算法的文章就介紹到這了,更多相關(guān)Java排序算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot實(shí)用配置詳細(xì)圖文教程

    springboot實(shí)用配置詳細(xì)圖文教程

    SpringBoot從本質(zhì)上來說就是Spring,它通過了一些自己的特性幫助我們簡(jiǎn)化了Spring應(yīng)用程序的開發(fā),下面這篇文章主要給大家介紹了關(guān)于springboot實(shí)用配置的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 解決SpringBoot在IDEA中熱部署失效問題

    解決SpringBoot在IDEA中熱部署失效問題

    熱部署是指程序運(yùn)行過程中實(shí)時(shí)更新或替換其組件的技術(shù),即項(xiàng)目正在啟動(dòng)中,修改了配置文件中某個(gè)值或者添加了某個(gè)方法或者修改了某個(gè)方法參數(shù),本文給大家介紹了解決SpringBoot在IDEA中熱部署失效問題,需要的朋友可以參考下
    2024-01-01
  • spring mvc常用注解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    spring mvc常用注解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了spring mvc常用注解,詳細(xì)的介紹了@RequestMapping, @RequestParam, @ModelAttribute等等這樣類似的注解,有興趣的可以了解一下
    2017-08-08
  • Java?SpringBoot?獲取接口實(shí)現(xiàn)類匯總

    Java?SpringBoot?獲取接口實(shí)現(xiàn)類匯總

    這篇文章主要介紹了Java?SpringBoot?獲取接口實(shí)現(xiàn)類匯總,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringBoot靜態(tài)資源配置原理(源碼分析)

    SpringBoot靜態(tài)資源配置原理(源碼分析)

    這篇文章主要介紹了SpringBoot靜態(tài)資源配置原理(源碼分析),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java使用ZipInputStream實(shí)現(xiàn)讀取和寫入zip文件

    java使用ZipInputStream實(shí)現(xiàn)讀取和寫入zip文件

    zip文檔可以以壓縮格式存儲(chǔ)一個(gè)或多個(gè)文件,本文主要為大家詳細(xì)介紹了java如何使用ZipInputStream讀取Zip文檔與寫入,需要的小伙伴可以參考下
    2023-11-11
  • jmeter正則表達(dá)式提取器的用法與正則詳解

    jmeter正則表達(dá)式提取器的用法與正則詳解

    在使用Jmeter過程中,會(huì)經(jīng)常使用到正則表達(dá)式提取器提取器,下面這篇文章主要給大家介紹了關(guān)于jmeter正則表達(dá)式提取器的用法與正則的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Springboot源碼 TargetSource解析

    Springboot源碼 TargetSource解析

    這篇文章主要介紹了Springboot源碼 TargetSource解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java語(yǔ)法關(guān)于泛型與類型擦除的分析

    Java語(yǔ)法關(guān)于泛型與類型擦除的分析

    泛型沒有其看起來那么深不可測(cè),它并不神秘與神奇,泛型是Java 中一個(gè)很小巧的概念,但同時(shí)也是一個(gè)很容易讓人迷惑的知識(shí)點(diǎn),它讓人迷惑的地方在于它的許多表現(xiàn)有點(diǎn)違反直覺
    2021-09-09
  • Java對(duì)象簡(jiǎn)單實(shí)用案例之計(jì)算器實(shí)現(xiàn)代碼

    Java對(duì)象簡(jiǎn)單實(shí)用案例之計(jì)算器實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Java對(duì)象簡(jiǎn)單實(shí)用案例之計(jì)算器實(shí)現(xiàn)代碼
    2016-11-11

最新評(píng)論