最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你了解Java排序算法

 更新時間:2022年08月30日 12:02:12   作者:熬夜磕代碼丶  
這篇文章主要為大家詳細介紹了Java中常見的三個排序算法:選擇排序,冒泡排序和插入排序,文中的示例代碼講解詳細,感興趣的可以了解一下

一、選擇排序

選擇排序是一種簡單直觀的排序算法,無論什么數(shù)據(jù)進去都是 O(n²) 的時間復雜度。所以用到它的時候,數(shù)據(jù)規(guī)模越小越好。唯一的好處可能就是不占用額外的內(nèi)存空間了吧

首先在未排序序列中找到最?。ù螅┰?,存放到排序序列的起始位置。

再從剩余未排序元素中繼續(xù)尋找最?。ù螅┰?,然后放到已排序序列的末尾。

重復第二步,直到所有元素均排序完畢。

public static void selectSort(int[] arr) {
        //選擇排序
        if(arr == null || arr.length < 2) {
            return;
        }
        int n = arr.length;
        for (int i = 0; i < n; i++) {
            int minValueIndex = i;
            for (int j = i+1; j < n; j++) {
                minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
            }
            swap(arr,i,minValueIndex);
        }
    }
    public static void swap(int[] arr,int i,int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        int[] arr = {7,5,1,9,4,2,6};
        printArray(arr);
        selectSort(arr);
        printArray(arr);
    }

二、冒泡排序

**冒泡排序算法的原理如下: **

1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

2.對每一對相鄰元素做同樣的工作,從開始第一對到結(jié)尾的最后一對。在這一點,最后的元素應該會是最大的數(shù)。

3.針對所有的元素重復以上的步驟,除了最后一個。

4.持續(xù)每次對越來越少的元素重復上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

public static void bubbleSort(int[] arr) {
        if(arr == null || arr.length < 2) {
            return;
        }
        int n = arr.length;
        for (int i = n-1; i >= 0; i--) {
            for (int j = 0; j < i; j++) {
                if(arr[j] > arr[j+1]) {
                    swap(arr,j,j+1);
                }
            }
        }
    }
     public static void swap(int[] arr,int i,int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    public static void main(String[] args) {
        int[] arr = {14,6,3,10,2};
        printArray(arr);
        bubbleSort(arr);
        printArray(arr);
    }

三、插入排序

插入排序是指在待排序的元素中,假設前面n-1(其中n>=2)個數(shù)已經(jīng)是排好順序的,現(xiàn)將第n個數(shù)插到前面已經(jīng)排好的序列中,然后找到合適自己的位置,使得插入第n個數(shù)的這個序列也是排好順序的。按照此法對所有元素進行插入,直到整個序列排為有序的過程,稱為插入排序

public static void insertSort(int[] arr) {
        if(arr == null || arr.length < 2) {
            return;
        }
        int n = arr.length;
        for (int i = 1; i < n; i++) {
            int currIndex = i;
            while(currIndex - 1 >= 0 && arr[currIndex-1] > arr[currIndex]) {
                swap(arr,currIndex,currIndex-1);
                currIndex--;
            }
        }
    }

    public static void swap(int[] arr,int i,int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    public static void main(String[] args) {
        int[] arr = {3,6,1,5,2};
        printArray(arr);
        insertSort(arr);
        printArray(arr);
    }

插入排序優(yōu)化

public static void insertSort1(int[] arr) {
        if(arr == null || arr.length < 2) {
            return;
        }
        int n = arr.length;
        for (int i = 1; i < n; i++) {
            for (int j = i-1; j >= 0; j--) {
                if(arr[j] > arr[j+1]) {
                    swap(arr,j,j+1);
                }else {
                    break;
                }
            }
        }
    }

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

相關文章

  • Spring Cloud調(diào)用Ribbon的步驟

    Spring Cloud調(diào)用Ribbon的步驟

    Ribbon是Netflix發(fā)布的開源項目,主要功能是提供客戶端的軟件負載均衡算法和服務調(diào)用。本文將講述Spring Cloud調(diào)用Ribbon的方法
    2021-05-05
  • SpringBoot 日志的配置及輸出應用教程

    SpringBoot 日志的配置及輸出應用教程

    Spring Boot 默認使用 SLF4J+Logback 記錄日志,并提供了默認配置。本文我們將重點介紹Spring Boot日志的配置及輸出。感興趣的小伙伴可以了解一下
    2021-12-12
  • 基于Java實現(xiàn)回調(diào)監(jiān)聽工具類

    基于Java實現(xiàn)回調(diào)監(jiān)聽工具類

    這篇文章主要為大家詳細介紹了如何基于Java實現(xiàn)一個回調(diào)監(jiān)聽工具類,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • 一文詳解JAVA中InputStreamReader流

    一文詳解JAVA中InputStreamReader流

    本文主要介紹了一文詳解JAVA中InputStreamReader流,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Java獲取年月日(格式:xxxx年xx月xx日)的方法詳解

    Java獲取年月日(格式:xxxx年xx月xx日)的方法詳解

    在開發(fā)應用程序時,經(jīng)常需要獲取當前的年、月、日,并以特定格式進行展示或處理,本文將介紹如何獲取年月日,并將其格式化為“xxxx年xx月xx日”的形式,幫助你在應用程序中處理日期信息,需要的朋友可以參考下
    2023-10-10
  • Java 動態(tài)代理深入理解

    Java 動態(tài)代理深入理解

    這篇文章主要介紹了Java 動態(tài)代理深入理解的相關資料,需要的朋友可以參考下
    2017-03-03
  • 使用spring的IOC解決程序耦合的方法

    使用spring的IOC解決程序耦合的方法

    這篇文章主要介紹了使用spring的IOC解決程序耦合的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Java 數(shù)組獲取最大和最小值的實例實現(xiàn)

    Java 數(shù)組獲取最大和最小值的實例實現(xiàn)

    這篇文章主要介紹了Java 數(shù)組獲取最大和最小值的實例實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • SpringSecurity的安全過濾器鏈功能詳解

    SpringSecurity的安全過濾器鏈功能詳解

    本文介紹了如何配置SpringSecurity的安全過濾器鏈,包括定義URL路徑的訪問權限、用戶認證和授權配置、自定義CSRF過濾器等內(nèi)容,通過這些配置,可以實現(xiàn)對不同URL路徑的訪問控制以及用戶的登錄、注銷等功能,感興趣的朋友一起看看吧
    2025-03-03
  • Spring和SpringBoot之間的區(qū)別

    Spring和SpringBoot之間的區(qū)別

    這篇文章主要介紹了Spring和SpringBoot之間的區(qū)別,幫助大家更好的理解和學習使用這兩種框架,感興趣的朋友可以了解下
    2021-04-04

最新評論

板桥市| 屏山县| 临邑县| 那坡县| 左权县| 荆门市| 河池市| 平潭县| 泸定县| 鹿泉市| 扶沟县| 江安县| 平潭县| 大丰市| 通化县| 明水县| 崇左市| 和顺县| 繁昌县| 武强县| 固安县| 冷水江市| 濮阳市| 北海市| 益阳市| 延津县| 绥中县| 大兴区| 宜良县| 洪江市| 广东省| 衢州市| 泾源县| 茂名市| 孝义市| 德州市| 涞源县| 应城市| 桃江县| 横峰县| 荔波县|