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

一文帶你了解Java排序算法

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

一、選擇排序

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

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

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

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

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.比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。

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

3.針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。

4.持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(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);
    }

三、插入排序

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

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

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

相關(guān)文章

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

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

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

    SpringBoot 日志的配置及輸出應(yīng)用教程

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

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

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

    一文詳解JAVA中InputStreamReader流

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

林周县| 连平县| 延寿县| 永年县| 烟台市| 安多县| 文昌市| 高阳县| 西城区| 驻马店市| 延边| 河间市| 博客| 敦煌市| 苗栗市| 唐海县| 云浮市| 河间市| 长垣县| 睢宁县| 清苑县| 新巴尔虎右旗| 包头市| 新兴县| 米泉市| 天水市| 买车| 夹江县| 深州市| 义乌市| 六枝特区| 永嘉县| 衡阳市| 镇原县| 来凤县| 定州市| 永川市| 河北区| 阳山县| 马尔康县| 九寨沟县|